利用PyQt中的QThread類實現(xiàn)多線程
- 用PyQt中的QThread類實現(xiàn)多線程
- 利用PyQt中的pyqtSignal類實現(xiàn)信息的觸發(fā)和捕獲,即定義事件和訂閱事件
利用QThread類實現(xiàn)多線程的方法
1,新建一個python類,繼承自QThread
from PyQt5.QtCore import QThread class SubThread(QThread):
2,重寫__init__(),__del__()和run()函數(shù)
from PyQt5.QtCore import QThread class SubThread(QThread): def __init__(self): super().__init__() # 以下加入需要的代碼 def __del__(self): self.wait() def run(self): # 以下加入子線程執(zhí)行的代碼
3,將繼承自QThread類實例化,然后調(diào)用實例對象的start()函數(shù),即可開啟新線程
【重點說明】
QThread的子類的實例,必須放在app = QtWidgets.QApplication(sys.argv)和sys.exit(app.exec_())代碼之間。
if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) subthread = SubThread() subthread.start() sys.exit(app.exec_())
利用pyqtSignal類實現(xiàn)信息觸發(fā)和捕獲的方法
1,在類內(nèi)頭部定義pyqtSignal屬性,記住,是類級別屬性
from PyQt5.QtCore import QThread, pyqtSignal class SubThread(QThread): messagetrigger = pyqtSignal(str) def __init__(self): super().__init__() # 以下加入需要的代碼 def __del__(self): self.wait() def run(self): # 以下加入子線程執(zhí)行的代碼
2,在需要觸發(fā)信息的地方使用,調(diào)用pyqtSignal的emit()函數(shù)觸發(fā)消息
import timefrom PyQt5.QtCore import QThread, pyqtSignal, QObject class SubThread(QThread): messagetrigger = pyqtSignal(str) def __init__(self): super().__init__() def __del__(self): self.wait() def run(self): self.messagetrigger.emit('子線程開始') time.sleep(2) self.messagetrigger.emit('子線程結(jié)束')
3,捕獲消息,使用pyqtSignal的connect()連接回調(diào)函數(shù),在回調(diào)函數(shù)內(nèi)處理捕獲到的信息,完整代碼如下:
import sysimport timefrom PyQt5.QtCore import QThread, pyqtSignal, QObject from PyQt5 import QtWidgets class SubThread(QThread): messagetrigger = pyqtSignal(str) def __init__(self): super().__init__() def __del__(self): self.wait() def run(self): self.messagetrigger.emit('子線程開始') time.sleep(2) self.messagetrigger.emit('子線程結(jié)束') def callback(msg): print(msg) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) subthread = SubThread() subthread.messagetrigger.connect(callback) subthread.start() sys.exit(app.exec_())
以上就是本文的全部內(nèi)容了,希望對大家學(xué)習(xí)python能夠有所幫助
相關(guān)文章
Python中構(gòu)建終端應(yīng)用界面利器Blessed模塊的使用
Blessed?庫作為一個輕量級且功能強大的解決方案,開始在開發(fā)者中贏得口碑,今天,我們就一起來探索一下它是如何讓終端UI開發(fā)變得輕松而高效的吧2025-01-01Python基于tkinter canvas實現(xiàn)圖片裁剪功能
這篇文章主要介紹了Python基于tkinter canvas實現(xiàn)圖片裁剪功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11詳解Python中數(shù)據(jù)類型的轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了Python中數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以了解一下2023-03-03Python基于Tkinter開發(fā)一個爬取B站直播彈幕的工具
這篇文章主要介紹了Python Tkinter如何開發(fā)一個爬取B站直播彈幕的工具,幫助大家更好的利用python進行圖形界面的開發(fā)學(xué)習(xí),感興趣的朋友可以了解下2021-05-05