我正忙着将一个IRC客户端从Python 2.6移植到3.3,我偶然发现了PyQt的一个问题。该应用程序最初使用PyQt4,我还重新编码它以使其与PyQt5一起使用,但我没有任何行引用而得到错误:" QWidget:必须在QPaintDevice和#34之前构建QApplication ;。我把这个问题缩小到了一个单一的阶段。
我知道它已经在这里多次被问到了,但是我无法为我的案例提供一个肯定的答案,所以如果我的问题看起来无知,我会道歉。
以下是一些代码:http://pastebin.com/Lj60icgQ
愚蠢的我没有把#34;应用程序"我应该在导入语句之后变量。然后我将其余代码放在主文件的底部,我不再收到该错误。谢谢你的帮助!
答案 0 :(得分:6)
在这种情况下,我担心单个文件是不够的 - 执行流程不仅仅是从这个模块中清除。当您尝试使用某些资源/创建一些需要初始化QApplication的对象(例如QIcon)时,通常会出现相关消息。
基于Qt的GUI应用程序的实例化通常如下所示:
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_window = MainWindowClass()
main_window.show()
sys.exit(app.exec_())
答案 1 :(得分:1)
错误消息非常明确:您在实例化{{1}之前尝试绘制QWidget
(PyQt4.5
继承QPaintDevice
和QObject
) }。但是你的代码太大了,无法逐行阅读。尝试隔离构建小型应用程序的错误并逐步添加功能。或者使用调试器(像QApplication
+ Eclipse
这样的IDE应该可以调试你的应用程序)。或者向我们提供一个小问题的独立示例。