利用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('子線程結束')
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('子線程結束')
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)容了,希望對大家學習python能夠有所幫助
相關文章
詳解Python如何利用petl做數(shù)據(jù)遷移
隨著數(shù)據(jù)量的不斷增長,數(shù)據(jù)遷移成為了一項必不可少的任務,本文就來為大家詳細介紹一下如何使用PETL進行數(shù)據(jù)遷移,并給出一些實踐案例,需要的可以參考下2024-01-01
python 實現(xiàn)對數(shù)據(jù)集的歸一化的方法(0-1之間)
今天小編就為大家分享一篇python 實現(xiàn)對數(shù)據(jù)集的歸一化的方法(0-1之間),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Jmeter并發(fā)執(zhí)行Python 腳本的完整流程
這篇文章主要介紹了Jmeter并發(fā)執(zhí)行 Python 腳本的問題詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
執(zhí)行python腳本并傳入json數(shù)據(jù)格式參數(shù)方式
這篇文章主要介紹了執(zhí)行python腳本并傳入json數(shù)據(jù)格式參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
解決Django migrate不能發(fā)現(xiàn)app.models的表問題
今天小編就為大家分享一篇解決Django migrate不能發(fā)現(xiàn)app.models的表問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08

