PyQt - 必须在QWidget之前构造QApplication

时间:2016-03-10 06:59:45

标签: python pyqt

我已经意识到在创建一个类变量来保存QWidget时,它会崩溃抱怨没有QApplication。我可以分解它来做这个最小的例子。

import sys
from PyQt4 import QtGui, QtCore

class ThumbContextMenu(QtGui.QMenu):
    def __init__(self):
        super(ThumbContextMenu, self).__init__()

class Example(QtGui.QWidget):
    menu = ThumbContextMenu()

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):               
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')    
        self.show()

def main():     
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

评论#menu会启动应用程序,或者将#menu作为实例变量也不会崩溃。

1 个答案:

答案 0 :(得分:1)

也许你想使用延迟初始化?这样的事情,也许是:

class Example(QtGui.QWidget):
    menu = None

    def __init__(self):
        ...
        if Example.menu is None:
            Example.menu = ThumbContextMenu()

问题是菜单是类变量,因此在评估Example定义时,即在调用QApplication构造函数之前,它是初始化的。