多線程是實現併發的一個重要手段。在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多線程操做:一個很簡單的有無多線程的效果對比,這裏就存在屢次發送信號的問題編程