这是我必须在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()。有人帮助我摆脱这个错误,因为我每隔一段时间重新启动内核才能执行。
答案 0 :(得分:1)
首先,你的例子不是很小。你会观察到,
from PyQt4 import QtGui
if __name__ == '__main__':
app = QtGui.QApplication([])
w = QtGui.QWidget()
w.show()
app.exec_()
已经成功了。
我的猜测是,让这个脚本运行两次的控制台不会删除QApplication(在控制台中键入应用程序,你看到变量仍在那里)。
在第二次运行中,新创建的QApplication会干扰旧运行中仍然存在的内容。它们都在同一个控制台中运行,它取决于spyder在运行文件时的作用。
要绕过此操作,请在另一次运行之前删除应用程序:
del app