SPYDER中的PyQT退出错误

时间:2017-03-23 08:03:18

标签: python pyqt qwidget

这是我必须在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()。有人帮助我摆脱这个错误,因为我每隔一段时间重新启动内核才能执行。

1 个答案:

答案 0 :(得分:1)

首先,你的例子不是很小。你会观察到,

from PyQt4 import QtGui

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

已经成功了。

我的猜测是,让这个脚本运行两次的控制台不会删除QApplication(在控制台中键入应用程序,你看到变量仍在那里)。

在第二次运行中,新创建的QApplication会干扰旧运行中仍然存在的内容。它们都在同一个控制台中运行,它取决于spyder在运行文件时的作用。

要绕过此操作,请在另一次运行之前删除应用程序:

del app