pyqt5-多線程初步


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

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中,需要注意的是,線程類需要成為主線程的一個數據成員,才能正常執行。
線程的信號量連接應該放在構造函數中進行,若放在別的地方進行可能會導致發送多次的信號發送問題。

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多線程操作:一個很簡單的有無多線程的效果對比,這里就存在多次發送信號的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM