QWidget 中的“必须在 QPaintDevice 之前构建 QApplication”

新手上路,请多包涵

我正忙于将 IRC 客户端从 Python 2.6 移植到 3.3,我偶然发现了 PyQt 的问题。该应用程序最初使用 PyQt4,我也在对其进行重新编码以使其与 PyQt5 一起使用,但我收到一个没有任何行引用的错误:“QWidget:必须在 QPaintDevice 之前构造一个 QApplication”。我已将问题缩小到一个班级。

我知道这里已经被问过很多次了,但我无法为我的案例提取一个确定的答案,所以如果我的问题显得无知,我深表歉意。

这是一些代码:http: //pastebin.com/Lj60icgQ

愚蠢的我没有在我应该的时候把“app”变量放在导入语句之后。然后我将其余代码放在主文件的底部,我不再收到该错误。谢谢您的帮助!

原文由 bricky149 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
2 个回答

恐怕在这种情况下单个文件是不够的——仅从这个模块来看执行流程并不清楚。当您尝试使用某些资源/创建一些需要初始化 QApplication 的对象(例如 QIcon)时,通常会出现相关消息。

基于 Qt 的 GUI 应用程序的实例化通常如下所示:

 if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main_window = MainWindowClass()
    main_window.show()
    sys.exit(app.exec_())

原文由 AlexVhr 发布,翻译遵循 CC BY-SA 3.0 许可协议

The error message is pretty clear: you are trying to draw a QWidget (which in PyQt4.5 inherits QPaintDevice and QObject ) before you instantiate QApplication 。但是您的代码太大,无法逐行阅读。尝试隔离构建小型应用程序并逐步添加功能的错误。或者使用调试器(像 Eclipse + PyDev 这样的 IDE 应该能够调试你的应用程序)。或者为我们提供一个小型的、独立的问题示例。

原文由 Vicent 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题