簡體   English   中英

QT Creator將ui轉換為可在Windows終端中使用的py,但不適用於spyder IDE

[英]QT Creator converted ui to py working in windows terminal but not working with spyder IDE

我正在學習有關使用QT Creator和python制作基本GUI的教程。 我已經成功創建了一個帶有按鈕的窗口,該按鈕在按下時會關閉該窗口。 它在QT Creator中運行良好,並且我將ui文件轉換為py,並且在打開命令提示符窗口並使用python main.py調用它時,按預期運行並創建了該窗口。 我喜歡在spyder IDE中工作,並希望繼續這樣做。 問題是,如果我在spyder中打開main.py並運行它將首先給出錯誤

An exception has occurred, use %tb to see the full traceback.

SystemExit: -1

那么如果我嘗試第二次運行它,內核將掛起。

成功在spyder中運行此腳本需要什么? 這是代碼:

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(400, 300)
        self.centralWidget = QtGui.QWidget(MainWindow)
        self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
        self.horizontalLayout = QtGui.QHBoxLayout(self.centralWidget)
        self.horizontalLayout.setMargin(11)
        self.horizontalLayout.setSpacing(6)
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.pushButton = QtGui.QPushButton(self.centralWidget)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.horizontalLayout.addWidget(self.pushButton)
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtGui.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 21))
        self.menuBar.setObjectName(_fromUtf8("menuBar"))
        MainWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtGui.QToolBar(MainWindow)
        self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtGui.QStatusBar(MainWindow)
        self.statusBar.setObjectName(_fromUtf8("statusBar"))
        MainWindow.setStatusBar(self.statusBar)

        self.retranslateUi(MainWindow)
        QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL(_fromUtf8("clicked()")), MainWindow.close)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.pushButton.setText(_translate("MainWindow", "Close", None))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

沒有實際的追溯很難說。 我猜這是兩件事之一,兩者都與Spyder也是基於Qt建立的事實有關。

  1. 您正在嘗試在Spyder環境中運行您的應用程序。 您的應用程序嘗試創建QApplication ,但是由於Spyder已經在Qt運行,因此QApplication已經存在並且出錯。

  2. PyQt / Qt的版本不匹配。 我假設Spyder附帶了它自己的Qt / PyQt版本,而您不必安裝它即可運行Spyder。 但是我猜您也確實安裝了自己的Qt / PyQt版本,並且PyQt正在加載錯誤的dll(Spyder附帶的dll,而不是您安裝的dll)。

要檢查的一些事情:

  • 檢查以確保您要從Spyder啟動外部進程(即在帶有新python進程的全新外殼中),而不僅僅是在Spyder嵌入式python進程中運行代碼。 我對Spyder不太了解,但是不知道如何執行此操作,但是大多數IDE都有一些設置來控制它如何啟動外部進程。

  • 從啟動的腳本中檢查PATH環境變量。 可能在安裝Qt之前添加了Spyder目錄,從而導致在導入PyQt時加載Spyder Qt dll而不是Qt的系統安裝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM