QWidget:必须在QPaintDevice之前构造QApplication

时间:2012-07-12 13:31:26

标签: python pyqt pyqt4

首先,出于兼容性原因,我使用Windows 7-64位与PyQwt5.2.0,PyQt4.5.4,NumPy1.3.0,python2.6.2 32位。

在运行我的脚本时,会出现:

QWidget: Must construct a QApplication before a QPaintDevice

上网,寻找解决问题的方法,我得到QWidget继承QObjectQPaintDevice(并且几乎我使用的每个对象都继承了它),{ {1}}继承QMainWindow。我还得到一些静态函数试图使用某些类,但我并不真正理解它的含义。

如果有人可以解释一下,我会非常感激。

PS:对于任何翻译错误感到抱歉。

2 个答案:

答案 0 :(得分:6)

从代码中,错误是由第102行引起的。在加载模块时,您创建了QWidget(更准确地说是QMainWindow)。这种情况发生在之后创建QApplication

另外,我不知道为什么你有这个起始变量,因为似乎没有使用它。

如果您想使用HelloBegin对象创建它,请使用__init__方法移动它。

修改

如果要在加载模块时显示启动画面,则需要通过小巧轻便的模块启动应用程序。在本单元中,您将:

  1. 创建QApplication
  2. 打开启动画面/消息框
  3. 仅加载其他模块
  4. 为了让一切顺利进行,我会在一个单独的函数中导入模块,并使用一个小技巧确保它只在GUI准备好后才启动。代码如下所示:

    from PyQt4.QtGui import QApplication
    from PyQt4.QtCore import QTimer
    def startApp():
        import m1
        import m2
        wnd = createWindow()
        wnd.show()
    import sys
    app = QApplication(sys.argv)
    splash = createSplashScreen()
    splash.show()
    QTimer.singleShot(1, startApp) # call startApp only after the GUI is ready
    sys.exit(app.exec_())
    

    其中createSplashScreen是创建启动画面的功能

答案 1 :(得分:0)

我在运行 unittest 时遇到错误。

QWidget: Must construct a QApplication before a QWidget

解决方案是为每种测试方法构建QApplication。

app = QtWidgets.QApplication(sys.argv)