我的问题是,当我使用Spyder时,在我不得不重新安装Spyder之前工作正常的代码现在要求我每次运行时重新启动Spyder(退出Python x,y)它。
我以为我昨天已经解决了这个问题,但由于某种原因,今天我的问题又回来了。
昨天有人建议this answer,它暂时有效。
我试过了:
import sys
from PyQt4 import QtGui
class CompiledWindow(QtGui.QWidget):
def __init__(self, parent = None):
......
cw = CompiledWindow()
cw.show()
我得到的错误是:
QWidget: Must construct a QApplication before a QPaintDevice
然后我回到了这里(与点之前一样)
app = QtGui.QApplication(sys.argv)
cw = CompiledWindow()
cw.show()
现在它运行正常,我第一次运行它,第二次,我得到了与以前相同的错误。第三次,它告诉我我没有选择外壳。
我真的不能从根本上理解它所抱怨的内容。如果我必须在QPaintDevice之前构造一个QApplication,为什么它第一次运行正常?显然,这是第一次发生。为什么后续运行会给我错误?此外,当我按照链接答案中的建议摆脱应用程序部分时,它工作......直到今天早上。
ETA这是所要求的最小工作示例。谢谢!
import sys
from PyQt4 import QtGui
class CompiledWindow(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.setWindowTitle('Enter data below to generate report')
names = ['Name Report', 'Open Logo Picture']
grid = QtGui.QGridLayout(self)
self.report_title_ask = QtGui.QLineEdit()
self.rt = QtGui.QLabel()
self.rt.setText(names[0])
grid.addWidget(self.report_title_ask, 0, 1)
grid.addWidget(self.rt, 0, 0)
self.Logo_button = QtGui.QPushButton(names[1], self)
self.LogoLabel = QtGui.QLabel()
self.Logo_button.clicked.connect(self.logo_pic)
grid.addWidget(self.Logo_button, 1, 0)
grid.addWidget(self.LogoLabel, 1,1)
self.done_button = QtGui.QPushButton()
self.done_button.setText('Click this when all data is entered')
self.done_button.clicked.connect(self.finish_input_click)
grid.addWidget(self.done_button, 2,1)
def rt_button_click(self):
self.report_title = self.report_title_ask.text()
def logo_pic(self):
self.Logo_picture = unicode(QtGui.QFileDialog.getOpenFileName())
self.LogoLabel.setText(self.Logo_picture)
def finish_input_click(self):
self.report_title = self.report_title_ask.text()
self.close()
app = QtGui.QApplication(sys.argv)
cw = CompiledWindow()
cw.show()