pyqt5-多線程初步

多線程是實現併發的一個重要手段。在GUI編程中,常常須要將耗費時間較多的任務分離出來成爲一個線程,避免對主線程形成影響(形成界面無響應)。
在Qt中,最簡單的多線程主要經過繼承QThread類實現,重載虛函數run()。html

class MyThread(QThread):
    #設置信號量用於輸出,解決輸出問題
    trigger = pyqtSignal()
    def __init__(self):
        super(RunThread, self).__init__()
    def run(self):
        #此處寫線程的邏輯
    def __del__(self):
        #線程結束的時候執行的代碼
        
    def set_value(src):
        #經過成員函數設置數據成員,解決輸入問題
        self.data=src

在Qt中,須要注意的是,線程類須要成爲主線程的一個數據成員,才能正常執行。
線程的信號量鏈接應該放在構造函數中進行,若放在別的地方進行可能會致使發送屢次的信號發送問題。python

class Win():
    def __init__(self):
        self.worker=MyThread()
        self.worker.finished.connect(self.fun)
    def on_btn(self):
        #按下按鈕以後的函數,須要開啓線程的時候
        self.worker.set_value(some_val)
        #這句代碼就是用於開啓線程的,使用多線程調用線程的run函數,因爲沒法在run傳入參數,因此須要另外的成員函數傳入參數,避免屢次開啓結束進程
        #若將信號鏈接放在這裏的話,會致使信號屢次鏈接到某個槽
        self.worker.start()

參考網站
PyQt5學習筆記14----初識pyqt多線程操做:一個很簡單的有無多線程的效果對比,這裏就存在屢次發送信號的問題編程

相關文章
相關標籤/搜索