本次分享主要介紹PyQt5多線程中信號與槽的使用示例。
QThread類是PyQt5中核心線程類,通過創建QThread類的子類並重寫其run()方法來實現一個線程。
QThread類常用方法及說明
方法
說明
start()
啟動線程
run()
線程的起點,調用start()方法之後,新創建的線程將調用該方法
wait()
阻塞線程
sleep()
以秒為單位休眠線程
msleep()
以毫秒為單位休眠線程
usleep()
以微妙為單位休眠線程
quit()
退出線程
exit()
退出線程的事件循環,如果返回0表示成功
terminate()
強制終止線程
setPriority()
設置線程優先級,取值:
1、QThread.IdlePriority,空閒優先級
2、QThread.LowestPriority,最低優先級
3、QThread.LowPriority,低優先級
4、QThread.NormalPriority,系統默認優先級
5、QThread.HighPriority,高優先級
6、QThread.HighestPriority,最高優先級
7、QThread.TimeCriticalPriority,儘可能頻繁地分配執行
8、QThread.InheritPriority,默認用與創建線程相同的優先級
isFinished()
是否完成
isRunning()
是否正在運行
QThread類常用信號
1、started:在調用run()方法之前,相關線程開始執行時從該線程發射
2、finished:在相關線程完成執行之前從該線程發射
簡單示例:
from PyQt5.QtCore import QThreadfrom PyQt5.QtWidgets import *
class Thread(QThread): def __init__(self): super(Thread, self).__init__()
def run(self): n=0 while True: n=n+1 print("列印輸出:",n) Thread.sleep(1) if n==8: Thread.quit()
if __name__=='__main__': import sys app=QApplication(sys.argv) thread=Thread() thread.start() sys.exit(app.exec_())
列印輸出:1列印輸出:2列印輸出:3列印輸出:4列印輸出:5列印輸出:6列印輸出:7列印輸出:8多線程信號與槽使用示例:
from PyQt5.QtCore import QThread, pyqtSignal, QDateTimefrom PyQt5.QtWidgets import QApplication, QDialog, QLineEditimport timeimport sys
class Thread(QThread): update_date = pyqtSignal(str)
def run(self): while True: data = QDateTime.currentDateTime() currTime = data.toString("yyyy-MM-dd hh:mm:ss") self.update_date.emit("當前時間:%s" % str(currTime)) time.sleep(1)
class Window(QDialog): def __init__(self): QDialog.__init__(self) self.setWindowTitle('pyqt5實時更新界面數據') self.resize(400, 100) self.input = QLineEdit(self) self.input.resize(400, 100) self.set_UI()
def set_UI(self): self.backend = Thread() self.backend.update_date.connect(self.handleDisplay) self.backend.start()
def handleDisplay(self, data): self.input.setText(data)
if __name__ == '__main__': app = QApplication(sys.argv) win = Window() win.show() sys.exit(app.exec_())
以上創建數據更新業務類Thread,然後自定義信號pyqtSignal,通過該信號的emit()方法將數據更新業務類動態發送給窗口的相應槽函數來實現數據的傳遞更新。
- 合作、交流、轉載請添加微信 moonhmily1 -