Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide2 QPushButton.setText()在停止视频馈送后使我的应用程序崩溃_Python_Pyside2 - Fatal编程技术网

Python PySide2 QPushButton.setText()在停止视频馈送后使我的应用程序崩溃

Python PySide2 QPushButton.setText()在停止视频馈送后使我的应用程序崩溃,python,pyside2,Python,Pyside2,我正在创建一个小部件,它在从QLabel派生的自定义小部件上显示来自机器视觉摄像头的实时摄像头提要 但是,当我停止订阅源的实时查看时,我的程序会无声地崩溃。 当我使用调试器时,最后一个执行行是停止提要的按钮上的self.ui.btn\u prev\u st.setText('Start')。如果我跨过它,我会进入CameraControl的update\u image(),但应用程序会在调试器仍然停止时关闭。 在这之后,app.exec\uz()似乎会返回,应用程序将关闭。 对于图像采集,我使用

我正在创建一个小部件,它在从QLabel派生的自定义小部件上显示来自机器视觉摄像头的实时摄像头提要

但是,当我停止订阅源的实时查看时,我的程序会无声地崩溃。
当我使用调试器时,最后一个执行行是停止提要的按钮上的
self.ui.btn\u prev\u st.setText('Start')
。如果我跨过它,我会进入CameraControl的
update\u image()
,但应用程序会在调试器仍然停止时关闭。
在这之后,
app.exec\uz()
似乎会返回,应用程序将关闭。
对于图像采集,我使用pymba。我在
setText()
之前调用了
self.cam.disarm()
函数,但如果我单步执行,它会正常执行。(它最后调用了
gc.collect()
,但这不应该做任何事情?
要么是我在Qt中出了点问题,要么是pymba解除功能导致的

有人有主意吗?我提供了一个简单的工作示例。
提前谢谢

main.py代码:

导入系统 导入操作系统 进口退欧 从PySide2.QtWidgets导入QApplication,QMainWindow 从PySide2.QtCore导入QFile,信号 从PySide2.QtUiTools导入QUiLoader 从ui\u main导入ui\u main 从camera_控件导入CameraControl 类主(QMainWindow): 启动采集信号=信号() 停止采集信号=信号() 定义初始化(自): 超级(主,自).\uuuu初始化 self.ui=ui_main() self.ui.setupUi(self) atexit.register(self.cleanup) self.ui.btn\u prev\u st.clicked.connect(self.prev\u start\u push) self.ui.btn\u设置\u roi.clicked.connect(self.ui.camera\u prev.apply\u roi) self.ui.btn\u重置\u roi.clicked.connect(self.ui.camera\u prev.reset\u roi) self.start\u采集\u信号.connect(self.ui.camera\u prev.start\u预览) self.stop\u采集\u信号.connect(self.ui.camera\u prev.stop\u预览) 定义(自我): del self.ui.camera_prev def清理(自): 德尔赛尔夫 def加载界面(自身): 加载器=QUiLoader() path=os.path.join(os.path.dirname(_文件__),“form.ui”) ui_file=QFile(路径) ui_file.open(QFile.ReadOnly) loader.load(用户界面文件,self) ui_file.close() def prev_start_按下(自身、事件): 如果self.ui.btn\u prev\u st.text()!='停止': self.start_采集_信号.emit() self.ui.btn\u prev\u st.setText('Stop') 其他: self.stop_采集_信号.emit() self.ui.btn\u prev\u st.setText('Start')) 如果名称=“\uuuuu main\uuuuuuuu”: app=QApplication([]) widget=main() widget.show() sys.exit(app.exec_()) camera_control.py:

从输入导入可选
进口cv2
将numpy作为np导入
从pymba导入Vimba,框架
从PySide2导入QtGui
从PySide2.qtwidts导入QLabel
从PySide2.QtCore导入信号,插槽,Qt,QPoint,QRect,QSize
从PySide2.QtGui导入QPixmap
类CameraControl(QLabel):
更改pixmap信号=信号(np.ndarray)
def uuu init uuu(self,parent=None):
超级(CameraControl,self)。\u初始化\u(父级)
self._first_show=True#是否第一次显示表单
self.is_running=False
self.change\u pixmap\u signal.connect(self.update\u image)
self.vimba=vimba()
self.vimba.startup()
self.cam=self.vimba.camera(0)
尝试:
self.cam.close()
除:
通过
self.cam.open()
self.setup\u摄像机()
self.update()
定义(自我):
尝试:
self.cam.disarm()
self.cam.close()
除:
通过
德尔赛尔夫·维姆巴
@槽()
def stop_预览(自):
self.is_running=False
#self.cam.stop\u frame\u acquisition()
self.cam.disarm()
@槽()
def start_预览(自):
自凸轮臂(“连续式”,自车架处理装置)
self.cam.start\u frame\u acquisition()
self.is_running=True
def frame_处理程序(自身,帧:帧,延迟:可选[int]=1)->无:
img=frame.buffer\u data\u numpy()
自我改变pixmap信号发射(img)
@插槽(np.N阵列)
def更新图像(自身、cv图像):
“”“使用新的opencv图像更新图像标签”“”
qt\u img=self.convert\u cv\u qt(cv\u img)
self.setPixmap(qt\u img)
ui_main.py:

从PySide2.QtCore导入*
从PySide2.QtGui导入*
从PySide2.QtWidgets导入*
从camera_控件导入CameraControl
类Ui_主(对象):
def设置UI(自身、主):
如果不是main.objectName():
main.setObjectName(u“main”)
main.resize(1192752)
self.centralwidget=QWidget(主)
self.centralwidget.setObjectName(u“centralwidget”)
self.box\u preview=QGroupBox(self.centralwidget)
self.box\u preview.setObjectName(u“box\u preview”)
self.box_preview.setGeometry(QRect(10,10601391))
self.btn\u prev\u st=QPushButton(self.box\u预览)
self.btn_prev_st.setObjectName(u“btn_prev_st”)
自身btn上一集几何(QRect(20,20,75,23))
self.camera\u prev=CameraControl(self.box\u预览)
self.camera\u prev.setObjectName(u“camera\u prev”)
自拍照前设置几何(QRect(110、20、480、360))
自拍照前设置最小尺寸(QSize(0,0))
自拍照前设置尺寸(QSize(640480))
self.camera_prev.setMouseTracking(真)
自拍照前设置框架形状(QFrame.Panel)
自拍照前设置缩放内容(假)
自相机前设置对齐(Qt.AlignCenter)
main.setCentralWidget(self.centralwidget)
self.menubar=QMenuBar(主)
self.menubar.setObjectName(u“menubar”)
self.menubar.setGeometry(QRect(0,0,1192,21))
main.setMenuBar(self.menubar)
self.statusbar=QStatusBar(主)