|
定时器本文将介绍PythonPyQt5QTimer定时器的使用方法和示例。QTimer定时器可以用于需要定期执行任务的应用场景,例如制作时钟、更新摄像头显示画面或倒计时计时器等。基本使用方法与事件绑定QTimer的事件可以通过QTimer.timeout.connect()信号槽绑定到对应的处理函数上。例如,在下面的示例中,定义了一个onTimer()函数,每当定时器时间到达时,就会执行这个函数。要启动QTimer定时器,需要调用QTimer.start()方法,并传入时间间隔,单位为毫秒(ms)。例如,传入1000表示每隔1000毫秒(即1秒)会触发一次onTimer()。需要注意的是,定时器不仅仅是触发一次,而是持续按照设定的时间间隔触发,直到调用QTimer.stop()方法停止。以下是一个完整的示例代码:importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QLabelfromPyQt5.QtGuiimportQFontfromPyQt5.QtCoreimportQTimerclassMyWidget(QWidget):def__init__(self):super().__init__()self.initUI()definitUI(self):self.setWindowTitle('我的窗口')self.setGeometry(50,50,200,150)self.mylabel=QLabel('0',self)self.mylabel.setFont(QFont('Arial',24))self.mylabel.move(60,50)self.counter=0self.mytimer=QTimer(self)self.mytimer.timeout.connect(self.onTimer)self.mytimer.start(1000)defonTimer(self):self.counter+=1self.mylabel.setText(str(self.counter))if__name__=='__main__':app=QApplication(sys.argv)w=MyWidget()w.show()sys.exit(app.exec_())123456789101112131415161718192021222324252627282930上面的示例运行之后,会显示一个标签控件,并在每秒更新一次显示的数字。使用按钮事件启动定时器使用按钮事件来启动和停止QTimer定时器。在这个示例中,将使用两个按钮,一个用于启动定时器,另一个用于停止定时器。为了防止用户重复点击启动按钮,在启动定时器时将其设为禁用状态,并启用停止按钮。当用户点击停止按钮时,定时器停止,两个按钮的状态也会相应切换。以下是使用按钮控制QTimer定时器的示例代码:importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QGridLayout,QLabel,QPushButtonfromPyQt5.QtGuiimportQFontfromPyQt5.QtCoreimportQTimerclassMyWidget(QWidget):def__init__(self):super().__init__()self.initUI()definitUI(self):self.setWindowTitle('我的窗口')self.setGeometry(50,50,200,150)self.gridlayout=QGridLayout()self.setLayout(self.gridlayout)self.mylabel=QLabel('0',self)self.mylabel.setFont(QFont('Arial',24))self.gridlayout.addWidget(self.mylabel,0,0,1,2)self.mybutton1=QPushButton('开始',self)self.mybutton1.clicked.connect(self.startTimer)self.gridlayout.addWidget(self.mybutton1,1,0)self.mybutton2=QPushButton('停止',self)self.mybutton2.clicked.connect(self.stopTimer)self.mybutton2.setDisabled(True)self.gridlayout.addWidget(self.mybutton2,1,1)self.mytimer=QTimer(self)self.mytimer.timeout.connect(self.onTimer)defstartTimer(self):self.counter=0self.mylabel.setText('开始计时...')self.mybutton1.setDisabled(True)self.mybutton2.setDisabled(False)self.mytimer.start(1000)defstopTimer(self):self.mylabel.setText('停止计时')self.mybutton1.setDisabled(False)self.mybutton2.setDisabled(True)self.mytimer.stop()defonTimer(self):self.counter+=1self.mylabel.setText(str(self.counter))if__name__=='__main__':app=QApplication(sys.argv)w=MyWidget()w.show()sys.exit(app.exec_())1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950在这个示例中,使用了QGridLayout来对UI组件进行布局。实现倒计时计时器除了作为常规定时器使用,QTimer还可以实现倒计时计时器的功能。例如,可以设置一个倒计时5秒的计时器,在倒计时结束时停止定时器并执行特定的函数或程序逻辑。以下是一个使用QTimer实现5秒倒计时的示例代码:importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QLabelfromPyQt5.QtGuiimportQFontfromPyQt5.QtCoreimportQTimerclassMyWidget(QWidget):def__init__(self):super().__init__()self.initUI()definitUI(self):self.setWindowTitle('我的窗口')self.setGeometry(50,50,200,150)self.counter=5self.mylabel=QLabel(str(self.counter),self)self.mylabel.setFont(QFont('Arial',24))self.mylabel.move(60,50)self.mytimer=QTimer(self)self.mytimer.timeout.connect(self.onTimer)self.mytimer.start(1000)defonTimer(self):self.counter-=1self.mylabel.setText(str(self.counter))ifself.counter==0:self.mytimer.stop()print('时间到')if__name__=='__main__':app=QApplication(sys.argv)w=MyWidget()w.show()sys.exit(app.exec_())123456789101112131415161718192021222324252627282930313233运行上述代码,将看到一个标签控件显示的数字每秒递减,直到计数结束。
|
|