PyQt5 窗口在运行几秒钟后自动关闭 - “进程以退出代码 -1073741819 (0xC0000005) 完成”

Posted

技术标签:

【中文标题】PyQt5 窗口在运行几秒钟后自动关闭 - “进程以退出代码 -1073741819 (0xC0000005) 完成”【英文标题】:PyQt5 window automatically closes after running for a few seconds - "Process finished with exit code -1073741819 (0xC0000005)" 【发布时间】:2021-05-08 12:15:34 【问题描述】:

我正在尝试使用使用网络摄像头的 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_())

当我运行它时,实际程序运行良好,但它会在几秒钟后自动关闭

进程以退出代码 -1073741819 (0xC0000005) 结束

块引用

奇怪的是,在 PyCharm 中调试代码时,它并没有关闭。但是每当我运行代码时,它会在几秒钟后自动关闭。任何帮助将不胜感激。

【问题讨论】:

您是否尝试过从终端运行代码?如果是这样,它会向您显示错误消息吗? 【参考方案1】:

这些总是很难解决,但我发现在初始化应用程序时应该避免使用 QThreads,因为它有时会导致随机关闭。

试试:

初始化应用程序并显示它。 运行网络摄像头类(虽然我建议你用函数替换它)

如果您想将此功能线程化以使其不锁定 UI,请查看 QThreadPool for PyQt5 (https://www.mfitzp.com/tutorials/multithreading-pyqt-applications-qthreadpool/)

【讨论】:

您能否详细说明如何将其更改为函数? 一旦你在我的链接中实现了 QThreadPool 类,你就可以将函数作为线程调用。 worker = Worker(self.camera_function) 然后使用 self.threadpool.start(worker) 运行它。您还可以连接任何信号以返回值或完成线程 - worker.signals.result.connect(self.function_to_send_result)

以上是关于PyQt5 窗口在运行几秒钟后自动关闭 - “进程以退出代码 -1073741819 (0xC0000005) 完成”的主要内容,如果未能解决你的问题,请参考以下文章

全网最详细的HBase启动以后,HMaster进程启动了,几秒钟以后自动关闭问题的解决办法(图文详解)

hbase启动后HMaster进程自动关闭

hbase启动后HMaster进程自动关闭

Python脚本在几秒钟后自动关闭,当它从IP摄像机对RTSP实时源进行对象检测时?

如何在不关闭 GUI 窗口的情况下停止运行 PyQt5 程序?

几秒钟后停用 UILongPressGestureRecognizer? [关闭]