主要通過qthread實現
通過run函式和start進行呼叫、啟動
使用類中的變數實現暫停、繼續
ref:
demo:
使用執行緒實現兩個數字迭代,使用兩組開始、停止,實現對執行緒中迴圈函式的開始、暫停
# -*- coding: utf-8 -*-# @time : 2020/4/18 19:36
# @author : zhao hl
# @file : 14_multthread.py
import sys
from pyqt5.qtcore import *
from pyqt5.qtwidgets import *
class example(qwidget):
def __init__(self):
super(example, self).__init__()
self.v_layout = qvboxlayout()
self.setlayout(self.v_layout)
self.bl1 = qlabel('0', self)
self.bl1.setalignment(qt.aligncenter)
self.bl2 = qlabel('0', self)
self.bl2.setalignment(qt.aligncenter)
self.btn_start1 = qpushbutton('start1',clicked=self.start1)
self.btn_start2 = qpushbutton('start2',clicked=self.start2)
self.btn_stop1 = qpushbutton('stop1',clicked=self.stop1)
self.btn_stop2 = qpushbutton('stop2',clicked=self.stop2)
self.hbox1 = qhboxlayout()
self.hbox2 = qhboxlayout()
self.hbox1.addwidget(self.btn_start1)
self.hbox1.addwidget(self.btn_stop1)
self.hbox2.addwidget(self.btn_start2)
self.hbox2.addwidget(self.btn_stop2)
self.v_layout.addwidget(self.bl1)
self.v_layout.addwidget(self.bl2)
self.v_layout.addlayout(self.hbox1)
self.v_layout.addlayout(self.hbox2)
self.thd1 = mythread(1)
self.thd1.signal.connect(self.process1)
self.thd2 = mythread(2)
self.thd2.signal.connect(self.process2)
self.show()
def process1(self,content):
self.bl1.settext(content)
def process2(self,content):
self.bl2.settext(content)
def start1(self):
self.thd1.start()
self.thd1.thd_on = true
def start2(self):
self.thd2.start()
self.thd2.thd_on = true
def stop1(self):
self.thd1.thd_on = false
self.thd1.exit()
def stop2(self):
self.thd2.thd_on = false
self.thd2.exit()
class mythread(qthread):#執行緒類
signal = pyqtsignal(str)
def __init__(self,gap):
super(mythread, self).__init__()
self.count = 0
self.thd_on = true
self.gap = gap
def run(self): #執行緒執行函式
while self.thd_on :
print(self.count)
self.count += self.gap
self.signal.emit(str(self.count))
self.sleep(1)
if __name__ == '__main__':
example = example()
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 多執行緒初步
多執行緒是實現併發的乙個重要手段。在gui程式設計中,經常需要將耗費時間較多的任務分離出來成為乙個執行緒,避免對主線程造成影響 造成介面無響應 在qt中,最簡單的多執行緒主要通過繼承qthread類實現,過載虛函式run class mythread qthread 設定訊號量用於輸出,解決輸出問題...