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

2021-10-16 20:39:05 字數 2286 閱讀 9761

您不應該向主檢視傳送乙個新的小部件(qlabel),因為它將是乙個新標籤,而不是原始標籤,您應該傳送str型別的文字class thread(qthread):

changepixmap = pyqtsignal(qpixmap)

changelabel = pyqtsignal(str)

def run(self):

now = datetime.datetime.now()

sec = now.second

self.changelabel.emit(str(sec))

然後將其連線到settext函式:

^$完整**:import sys

import cv2

from pyqt5.qtcore import qthread, pyqtsignal, qt

from pyqt5.qtgui import qpixmap, qimage

import datetime

def __init__(self):

super().__init__()

self.title = 'pyqt5 video'

self.left = 100

self.top = 100

self.width = 640

self.height = 480

self.initui()

def initui(self):

self.setwindowtitle(self.title)

self.setgeometry(self.left, self.top, self.width, self.height)

self.resize(1800, 1200)

# create a label

# create a label

label = qlabel(self)

label.move(280, 120)

label.resize(640, 480)

label1 = qlabel(self)

label1.move(580, 620)

self.th = thread(self)

self.th.changepixmap.connect(label.setpixmap)

self.th.changelabel.connect(label1.settext)

self.th.start()

def closeevent(self, event):

self.th.stop()

qwidget.closeevent(self, event)

class thread(qthread):

changepixmap = pyqtsignal(qpixmap)

changelabel = pyqtsignal(str)

def __init__(self, parent=none):

qthread.__init__(self, parent=parent)

self.isrunning = true

def run(self):

cap = cv2.videocapture(0)

while self.isrunning:

ret, frame = cap.read()

rgbimage = cv2.cvtcolor(frame, cv2.color_bgr2rgb)

converttoqtformat = qimage(rgbimage.data, rgbimage.shape[1], rgbimage.shape[0], qimage.format_rgb888)

converttoqtformat = qpixmap.fromimage(converttoqtformat)

p = converttoqtformat.scaled(640, 480, qt.keepaspectratio)

self.changepixmap.emit(p)

now = datetime.datetime.now()

sec = now.second

self.changelabel.emit(str(sec))

def stop(self):

self.isrunning = false

self.quit()

self.wait()

if __name__ == '__main__':

ex.show()

注意:我新增了stop方法來停止執行緒並正確關閉,為此我還重寫了closeevent方法。另乙個改變,我移動了label1,因為我的螢幕不是那麼大。在

PyQt5多執行緒

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

pyqt5 多執行緒初步

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

pyqt5切換python版本 pyqt5介面切換

主要的思路就是建立兩個frame 如果有兩個以上同理 使用setvisible 函式顯示或者隱藏frame 引數是bool值 import sys from pyqt5.qtwidgets import from pyqt5.qtcore import from pyqt5.qtgui import...