您不應該向主檢視傳送乙個新的小部件(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...