7

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

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

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

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

4

3 回答 3

11

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

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

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    main_window = MainWindowClass()
    main_window.show()
    sys.exit(app.exec_())
于 2013-10-15T14:59:00.853 回答
2

错误消息非常清楚:您QWidgetPyQt4.5实例QPaintDevice化. 但是您的代码太大,无法逐行阅读。尝试隔离错误构建小型应用程序并逐步添加功能。或者使用调试器(像+这样的 IDE 应该能够调试您的应用程序)。或者为我们提供一个小的、独立的问题示例。QObjectQApplicationEclipsePyDev

于 2013-10-15T15:03:12.560 回答
0

如果您不需要自己的自定义窗口类,则可以使用 QWidget:

import sys
from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)
window = QWidget()
window.show()
app.exec()
于 2022-02-19T13:59:58.160 回答