pyqt5 多執行緒初步

2022-08-13 01:06:16 字數 1005 閱讀 4132

多執行緒是實現併發的乙個重要手段。在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多執行緒操作:乙個很簡單的有無多執行緒的效果對比,這裡就存在多次傳送訊號的問題

pyqt5多執行緒優化 PyQt5多執行緒

您不應該向主檢視傳送乙個新的小部件 qlabel 因為它將是乙個新標籤,而不是原始標籤,您應該傳送str型別的文字class thread qthread changepixmap pyqtsignal qpixmap changelabel pyqtsignal str def run self ...

PyQt5多執行緒

多執行緒一般有兩種辦法 繼承qthread 繼承qobject並使用movetothread 官方推薦 self.test thread2.quit self.test thread2.wait 如果不確保執行緒完全退出,執行緒再次執行時程式會崩潰。效果圖 原始碼 import time from ...

pyqt5多執行緒更新ui

訊號傳參型別 pyqtsignal 無引數訊號 pyqtsignal int 乙個引數 整數 的訊號 pyqtsignal int str 乙個引數 整數或者字串 過載版本的訊號 pyqtsignal int,str 二個引數 整數,字串 的訊號 pyqtsignal int,int int,str...