首先,出于兼容性原因,我将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(并且它几乎被我使用的每个对象继承),而QMainWindow继承了QWidget。我还得到一些静态函数正在尝试使用某些类,但是我并不真正理解它的含义。

如果有人可以解释一下,我将不胜感激。

PS:对不起,如果有翻译错误。

最佳答案

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

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

如果要使用HelloBegin对象创建它,请在__init__方法中移动它。

编辑:

如果要在模块加载时显示启动屏幕,则需要由一个小型,轻量级的模块启动该应用程序。在本模块中,您将:

  • 创建QApplication
  • 打开初始屏幕/消息框
  • 仅然后加载其他模块

  • 为了使一切顺利进行,我将在一个单独的函数中导入模块,并使用一个小技巧来确保仅在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是创建初始屏幕的函数

    关于python - QWidget : Must construct a QApplication before a QPaintDevice,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11452937/

    10-16 01:52