在这个例子中,parent
参数从何而来,谁提供它?在
class MainWindow(QtGui.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.do_something() #sanity check
self.cw = ChildWidget(self)
self.setCentralWidget(self.cw)
self.show()
def do_something(self):
print 'doing something!'
class ChildWidget(QtGui.QWidget):
def __init__(self, parent):
super(ChildWidget, self).__init__(parent)
self.button1 = QtGui.QPushButton()
self.button1.clicked.connect(self.do_something_else)
self.button2 = QtGui.QPushButton()
self.button2.clicked.connect(self.parent().do_something)
self.layout = QtGui.QVBoxLayout()
self.layout.addWidget(self.button1)
self.layout.addWidget(self.button2)
self.setLayout(self.layout)
self.show()
def do_something_else(self):
print 'doing something else!'
父、子对QT(C++)有特异性。从doc of QObject:
QWidget
和许多其他类继承自QObject
,因此它也适用于它们。对于每个子对象,parent()
方法返回指向父对象的指针。在基本上,你用父母创建widget,这样他们就可以被正确删除了。 通常情况下,主窗口是所有窗口小部件的父级或祖父母级:当您关闭窗口时,所有内容都将按正确的顺序删除。在
从你的评论来看,我认为你也对
super()
的用法感到困惑。它不调用小部件的父控件。在另一种写法是:
直接调用
^{pr2}$QWidget
的init方法:ChildWidget
继承自QWidget
(这就是我们定义类的方式)。在init方法中,需要调用QWidget
的默认构造函数。否则,您将无法使用QWidget
(请尝试查看…)的默认方法和属性。如果给它一个父母,它也会相应地组织自己。它将自己添加到父方法
children
,并保留对其父方法的引用。在相关问题 更多 >
编程相关推荐