我正在尝试用PyQt5制作一个桌面应用程序,它利用网络摄像头。我看了一段YouTube视频,视频中那个家伙用线程实现了这一点。我为我的用例修改了代码。修改后的代码如下:-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import cv2
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Ayyo")
self.GL = QGridLayout()
self.feedLabel = QLabel()
self.GL.addWidget(self.feedLabel, 0, 0, 1, 2)
self.lineEdit = QLineEdit()
self.GL.addWidget(self.lineEdit, 1, 0, 1, 1)
self.button1 = QPushButton("Confirm")
self.button1.clicked.connect(self.confirm)
self.GL.addWidget(self.button1, 1, 1, 1, 1)
self.textEdit = QTextEdit()
self.GL.addWidget(self.textEdit, 2, 0, 2, 1)
self.button2 = QPushButton("Clear")
self.button2.clicked.connect(self.clear)
self.GL.addWidget(self.button2, 2, 1, 1, 1)
self.button3 = QPushButton("Copy")
self.GL.addWidget(self.button3, 3, 1, 1, 1)
self.webcam = Webcam()
self.webcam.start()
self.webcam.ImageUpdate.connect(self.ImageUpdateSlot)
self.setLayout(self.GL)
self.show()
def ImageUpdateSlot(self, image):
self.feedLabel.setPixmap(QPixmap.fromImage(image))
def confirm(self):
current = self.textEdit.toPlainText()
self.textEdit.setPlainText(current + self.lineEdit.text())
def clear(self):
self.textEdit.setPlainText("")
class Webcam(QThread):
ImageUpdate = pyqtSignal(QImage)
def run(self):
self.ThreadActive = True
vid = cv2.VideoCapture(0)
while True:
ret, frame = vid.read()
frame1 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = QImage(frame1, frame1.shape[1], frame1.shape[0], frame1.strides[0], QImage.Format_RGB888)
self.ImageUpdate.emit(image)
app = QApplication(sys.argv)
mw = MainWindow()
# mw.show()
sys.exit(app.exec_())
当我运行这个程序时,实际的程序运行得很好,但几秒钟后,它会自动关闭
Process finished with exit code -1073741819 (0xC0000005)
大宗报价
奇怪的是,在PyCharm中调试代码时,它没有关闭。但每当我运行代码时,它都会在几秒钟后自动关闭。任何帮助都将不胜感激
这些问题总是很难解决,但我发现在初始化应用程序时应该避免使用QThreads,因为它有时会导致随机关闭
尝试:
如果您希望将此功能线程化,从而不锁定UI,请查看PyQt5(https://www.mfitzp.com/tutorials/multithreading-pyqt-applications-qthreadpool/)的QThreadPool
相关问题 更多 >
编程相关推荐