【问题标题】:PyQT exit error in SPYDERSPYDER 中的 PyQT 退出错误
【发布时间】:2017-03-23 20:16:50
【问题描述】:

这是我必须在 Spyder 中执行的 PyQT 代码。第一次,我执行了它,效果很好。第二次,它说:

QWidget:必须在 QPaintDevice 之前构造一个 QApplication "

我搜索了解决方案,但对我没有任何帮助。

from PyQt4 import QtGui, QtCore
import sys

class Window(QtGui.QWidget):
    def __init__(self):
           QtGui.QWidget.__init__(self)
           self.button = QtGui.QPushButton('Test', self)
           self.button.clicked.connect(self.handleButton)
           layout = QtGui.QVBoxLayout(self)
           layout.addWidget(self.button)

    def handleButton(self):
           print ('Hello World')

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
app.exec_()
#sys.exit(app.exec_())

我什至评论了一些人提出的 sys.exit() 。有人可以帮我摆脱这个错误,因为我每隔一段时间就会重新启动内核来执行。

【问题讨论】:

    标签: python pyqt qwidget


    【解决方案1】:

    首先,您的示例并不是最小的。你会发现,

    from PyQt4 import QtGui
    
    if __name__ == '__main__':
        app = QtGui.QApplication([])
        w = QtGui.QWidget()
        w.show()
        app.exec_()
    

    已经成功了。

    我的猜测是,您让此脚本运行两次的控制台不会删除 QApplication(在控制台中键入 app,您会看到变量仍然存在)。

    在第二次运行中,新创建的 QApplication 会干扰旧运行中仍然存在的 QApplication。它们都在同一个控制台中运行,这在一定程度上取决于 spyder 在运行文件时所做的事情。

    要规避此问题,请在再次运行之前删除应用:

    del app
    

    【讨论】:

    • del 应用程序为我工作。你认为我可以将它集成到代码中,以便它自动执行/
    • 当然,你可以在 app.exec_() 之后添加它
    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 2019-12-22
    • 2016-02-17
    • 2020-05-13
    相关资源
    最近更新 更多