我已经意识到在创建一个类变量来保存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作为实例变量也不会崩溃。
答案 0 :(得分:1)
也许你想使用延迟初始化?这样的事情,也许是:
class Example(QtGui.QWidget):
menu = None
def __init__(self):
...
if Example.menu is None:
Example.menu = ThumbContextMenu()
问题是菜单是类变量,因此在评估Example定义时,即在调用QApplication构造函数之前,它是初始化的。