PyQt5 QThread倒計時功能的實現代碼
1.創建多線程類
全局變量 sec
class work_thread(QThread): timer = pyqtSignal() # 每隔一秒發送信號 end = pyqtSignal() # 計數完成發送信號 def run(self) -> None: while True: self.sleep(1) if sec == 0: self.end.emit() # 發送end信號 break self.timer.emit()
2.實例化線程類,綁定計數,技術結束事件
self.label.setText("20") global sec sec = 20 self.work_thread = work_thread() self.work_thread.timer.connect(self.count_time) self.work_thread.end.connect(self.end)
3.綁定開始按鈕事件
self.pushButton.clicked.connect(self.start)
4.事件方法
def count_time(self): global sec sec = int(self.label.text()) sec -= 1 self.label.setText(str(sec)) def end(self): self.statusbar.showMessage("計數停止") def start(self): self.work_thread.start() # 啟動線程
PS:知識點擴展
PyQt5 倒計時按鈕功能實現
""" 這個例子中我們實現瞭兩個功能:菜單按鈕、帶倒計時的按鈕(賬戶註冊的時候經常會碰到)。 """ from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QMenu from PyQt5.QtCore import QTimer import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.resize(400,300) self.setWindowTitle('早點畢業吧--按鈕(QPushButton)') bt1 = QPushButton("這是什麼",self) bt1.move(50,50) self.bt2 = QPushButton('發送驗證碼',self) self.bt2.move(200,50) """ 設置菜單按鈕其實很簡單,首先我們新建一個QMenu對象。這裡的addSeparator(),其實就是給菜單增加一個分隔符。 """ menu = QMenu(self) menu.addAction('我是') menu.addSeparator() menu.addAction('世界上') menu.addSeparator() menu.addAction('最帥的') bt1.setMenu(menu)#然後將這個菜單添加到QPushButton對象中 """ 第二個例子,我們使用到QTimer這個類,我們前面很多次都用到瞭這個和時間相關的類。後面會專門的講解的。 QTimer類提供重復性和單次定時器。QTimer類為定時器提供高級編程接口。要使用它,請創建一個QTimer,將其timeout()信號連接到相應的插槽,然後調用start()。從此以後,它將以固定的時間間隔發出timeout()信號。 setInterval()該屬性擁有以毫秒為單位的超時時間間隔。此屬性的默認值為0。 """ self.count = 10 self.bt2.clicked.connect(self.Action) self.time = QTimer(self) self.time.setInterval(1000) self.time.timeout.connect(self.Refresh) self.show() """ 我們單擊按鈕後,進行判斷若按鈕沒有被禁用,則激活定時器,同時將按鈕禁用,即禁止點擊。 """ def Action(self): if self.bt2.isEnabled(): self.time.start() self.bt2.setEnabled(False) """ 進入超時狀態後,我們開始倒計時。同時讓按鈕上的文字不斷的在變化。 當倒計時完成的時候,我們停止定時器。將按鈕恢復成正常的狀態。同時重置倒計時的值,為下次的使用做好準備。 """ def Refresh(self): if self.count > 0: self.bt2.setText(str(self.count)+'秒後重發') self.count -= 1 else: self.time.stop() self.bt2.setEnabled(True) self.bt2.setText('發送驗證碼') self.count = 10 if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
到此這篇關於PyQt5 QThread倒計時的文章就介紹到這瞭,更多相關PyQt5 QThread倒計時內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- None Found