赞
踩
第一种使用对象(和第二种相似)
from PyQt5.QtWidgets import * from PyQt5.QtCore import QObject,QRect import sys #只能在类外部进行终止定时器 我是没能知道怎么在内部进行终止 #类包含一个timeEvent定时器 class myobject(QObject): #这是每个对象所包含的一个定时器函数 def timerEvent(self,event): #不能在这个类下面进行终止 print(event,"1") class LoginDlg(QDialog): def setui(self): self.setWindowTitle("这是一个定时器") self.resize(300,200) self.btn = QPushButton(self) self.btn.setText("按钮") self.btn.setGeometry(QRect(180, 10, 100, 50)) self.btn.clicked.connect(self.pause) # 先把这个类实例化 self.obj = myobject(self) #启动定时器并把这个定时器赋值到self.id self.id = self.obj.startTimer(1000) def pause(self): #终止这个类下的定时器 self.obj.killTimer(self.id) print("已停止") if __name__ == "__main__": app = QApplication(sys.argv) ui = LoginDlg() ui.setui() ui.show() sys.exit(app.exec_())
第二种(用组件本身对象进行定时器)
from PyQt5.QtWidgets import * from PyQt5.QtCore import QObject,QRect import sys #组件Label的类 传入QLabel 也可以传入QObject 等 class Label(QLabel): #这里要带入父类 def __init__(self,par): #继承父类 这里记得带上par 父类 super(Label, self).__init__(par) self.d = par self.setText("10") def timerEvent(self,evt): sum = int(self.text()) sum -= 1 if sum==5: #只能在此类下进行终止定时器 self.killTimer(self.d.id) else: self.setText(str(sum)) class LoginDlg(QDialog): def setui(self): self.setWindowTitle("这是一个定时器") self.resize(300,200) self.btn = QPushButton(self) self.btn.setText("按钮") print(111) self.btn.setGeometry(QRect(180, 10, 100, 50)) #实例化这个label类 label = Label(self) label.move(70, 20) #启动定时器 self.id = label.startTimer(1000) if __name__ == "__main__": app = QApplication(sys.argv) ui = LoginDlg() ui.setui() ui.show() sys.exit(app.exec_())
第三种就是自带的QTimer函数
#!/usr/bin/python3 #coding:utf-8 from PyQt5.QtWidgets import * from PyQt5.QtCore import QObject,QRect,QTimer import sys #记得导入定时器 也只能在这个类下停止 #QTime貌似只能stop不能kill 不停止重新调用就会 加快 class LoginDlg(QDialog): def setui(self): self.setWindowTitle("这是一个定时器") self.resize(300,200) self.btn = QPushButton(self) self.btn.setText("点击开始") self.btn.setGeometry(QRect(180, 10, 100, 50)) self.btn.clicked.connect(self.star) def a(self): print(1) def star(self): #这里是错误的示范 应该写在上面的启动窗口里面 具体原因看最后 #实例化定时器 self.timer = QTimer(self) self.timer.timeout.connect(self.a) #注意这里是start不是startTimer self.timer.start(1000) if __name__ == "__main__": app = QApplication(sys.argv) ui = LoginDlg() ui.setui() ui.show() sys.exit(app.exec_())
本人小白 有错误的地方还请指导
因为本人想实现获取一个请求 请求会返回二维码 我把二维码展示在QLabel上的 可是 无奈只能请求后禁用请求按钮,等待60秒停止再打开按钮,不然就会加速去执行这个定时器,应该是启动的多线程
后来想到了这样
class LoginDlg(QDialog): def setui(self): self.setWindowTitle("这是一个定时器") self.resize(300,200) self.btn = QPushButton(self) self.btn.setText("点击开始") self.btn.setGeometry(QRect(180, 10, 100, 50)) self.btn.clicked.connect(self.star) #实例化定时器 写在主窗口里面 self.timer = QTimer(self) self.timer.timeout.connect(self.a) def a(self): self.aa += 1 print(self.aa) def star(self): #把定时器写在主窗口里面 之前再次调用是因为写在了按钮事件里面 #这样就不会出现再打开一个定时器 而是一直循环调用这个定时器 #执行另外一个函数或者按钮链接两个槽一个启动这个定时器 #一个用来执行请求参数 每次刷新就重新获取请求返回的参数(这个是不固定的)所以每次都要调用一下 print("已刷新") #写在主窗口也可以 再次start是重新启动 self.aa = 0 #注意这里是start不是startTimer self.timer.start(1000)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。