多執行緒一般有兩種辦法:
繼承qthread
繼承qobject並使用movetothread(官方推薦)
self.test_thread2.quit()
self.test_thread2.wait()
如果不確保執行緒完全退出,執行緒再次執行時程式會崩潰。
效果圖:
原始碼:
import timefrom 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...