PyQt5多執行緒

2021-09-24 02:55:30 字數 2381 閱讀 7953

多執行緒一般有兩種辦法:

繼承qthread

繼承qobject並使用movetothread(官方推薦)

self.test_thread2.quit()

self.test_thread2.wait()

如果不確保執行緒完全退出,執行緒再次執行時程式會崩潰。

效果圖:

原始碼:

import time

from pyqt5.qtcore import qobject, pyqtsignal, qthread

class testworker1(qthread):

_signal = pyqtsignal(int)

def __init__(self):

super(testworker1, self).__init__()

def run(self):

for i in range(101):

print(i)

self._signal.emit(i)

time.sleep(0.01)

class testworker2(qobject):

_signal = pyqtsignal(int)

finished = pyqtsignal()

def __init__(self):

super(testworker2, self).__init__()

def run(self):

for i in range(101):

print(i)

self._signal.emit(i)

time.sleep(0.01)

self.finished.emit()

class threaddialog(qdialog):

def __init__(self):

super(threaddialog, self).__init__()

self.grid_layout = qgridlayout(self)

self.progress = qprogressbar(self)

self.grid_layout.addwidget(self.progress, 0, 0, 1, 2)

self.pushbutton1 = qpushbutton('繼承執行緒', self)

self.grid_layout.addwidget(self.pushbutton1, 1, 0, 1, 1)

self.pushbutton2 = qpushbutton('movetothread', self)

self.grid_layout.addwidget(self.pushbutton2, 1, 1, 1, 1)

self.pushbutton1.clicked.connect(self.pushbutton1_clicked)

self.pushbutton2.clicked.connect(self.pushbutton2_clicked)

def pushbutton1_clicked(self):

self.test_worker1 = testworker1()

self.test_worker1._signal.connect(self.progress.setvalue)

self.test_worker1.start()

def pushbutton2_clicked(self):

self.test_worker2 = testworker2()

self.test_thread2 = qthread()

self.test_worker2.movetothread(self.test_thread2)

self.test_worker2._signal.connect(self.progress.setvalue)

self.test_worker2.finished.connect(self.test_worker2_finished)

self.test_thread2.started.connect(self.test_worker2.run)

self.test_thread2.start()

def test_worker2_finished(self):

self.test_thread2.quit()

self.test_thread2.wait()

if __name__ == '__main__':

import sys

thread_dialog = threaddialog()

thread_dialog.show()

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

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

pyqt5 多執行緒初步

多執行緒是實現併發的乙個重要手段。在gui程式設計中,經常需要將耗費時間較多的任務分離出來成為乙個執行緒,避免對主線程造成影響 造成介面無響應 在qt中,最簡單的多執行緒主要通過繼承qthread類實現,過載虛函式run class mythread qthread 設定訊號量用於輸出,解決輸出問題...

pyqt5多執行緒更新ui

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