PyQT5程序仅在首次编译运行时返回错误

时间:2018-11-14 07:19:54

标签: python compiler-errors pyqt5 spyder

以下示例在新的ipython控制台(spyder)中运行时返回“ -1”,但仅在第一次尝试时返回。之后,它似乎可以正常工作。

from PyQt5 import QtWidgets, QtGui, QtCore

from GUI import Ui_MainWindow  # importing our generated file

import sys
import numpy as np

class mywindow(QtWidgets.QMainWindow):

    def __init__(self):

        super(mywindow, self).__init__()

        self.ui = Ui_MainWindow()

        self.ui.setupUi(self)

app = QtCore.QCoreApplication.instance()
if app is None:
    app = QtWidgets.QApplication(sys.argv)

application = mywindow()

application.show()

sys.exit(app.exec())

错误如下:

  

> runfile('C:/Users/xxx.py',wdir ='C:/ Users / xx / Documents / 3dPackaging')   发生异常,请使用%tb查看完整的追溯。

     

SystemExit:-1

     

C:\ Users \ xx \ Documents \ Anaconda \ lib \ site-packages \ IPython \ core \ interactiveshell.py:2969:用户警告:要退出:请使用“退出”,“退出”或Ctrl-D。     警告(“退出:使用'退出','退出'或Ctrl-D。”,堆栈级别= 1)

     

%tb   追溯(最近一次通话):

     

文件“”,第1行,在       runfile('C:/Users/xxx.py',wdir ='C:/ Users / xx')

     

runfile中的文件“ C:\ Users \ xx \ Documents \ Anaconda \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,行668       execfile(文件名,命名空间)

     

exec文件中的文件“ C:\ Users \ xx \ Documents \ Anaconda \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py”,第108行       exec(compile(f.read(),文件名,'exec'),命名空间)

     

文件“ C:/Users/xx/Documents/3dPackaging/VersandkartonsPacken.py”,第64行,在       sys.exit(app.exec())

     

SystemExit:-1

我不知道这可能是什么,但是由于有一天应该将其作为一个独立程序,因此恐怕那时可能会很混乱,所以我宁愿修复它。我应该尝试什么?

没有GUI.py是无法复制的,所以这里是:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1127, 910)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton_schliessen = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_schliessen.setGeometry(QtCore.QRect(930, 770, 75, 23))
        self.pushButton_schliessen.setObjectName("pushButton_schliessen")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(440, 20, 421, 31))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(170, 770, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.tableWidget_input = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget_input.setGeometry(QtCore.QRect(160, 80, 421, 671))
        self.tableWidget_input.setObjectName("tableWidget_input")
        self.tableWidget_input.setColumnCount(0)
        self.tableWidget_input.setRowCount(0)
        self.tableWidget_output = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget_output.setGeometry(QtCore.QRect(650, 80, 441, 671))
        self.tableWidget_output.setObjectName("tableWidget_output")
        self.tableWidget_output.setColumnCount(0)
        self.tableWidget_output.setRowCount(0)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1127, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton_schliessen.setText(_translate("MainWindow", "Schliessen"))
        self.label.setText(_translate("MainWindow", "Versandkartons Packen"))
        self.pushButton.setText(_translate("MainWindow", "Berechnen"))

它似乎与this有关,app从来都不是,但在第一次运行时已经返回了QCoreApplication。但是,将其移入功能不起作用。而且我无法在控制台中重现实际上使其在第二次运行中起作用的行为。似乎有些事情使QCorEApplication变成了可以正常工作的应用程序。

在两个已删除的答案(无法使用)中,建议使用if __name__ == '__main__':并将应用程序调用移到新类中。那没用。

2 个答案:

答案 0 :(得分:5)

这必须与本地系统的特殊性有关。在干净的环境中(即使环境与受影响的系统非常匹配时)从头开始安装需求时,我们(原始问题的评论者)无法重现该错误。

请尝试重新安装您的环境,或在其他系统上运行该环境,看看问题是否仍然存在。

答案 1 :(得分:0)

我使用了可能与此问题有关的conda。我刚刚用pip install PyQt5升级了PyQT5,使此问题消失了。因此,这似乎是最简单的解决方案。