【发布时间】:2015-11-09 06:56:04
【问题描述】:
在这个例子中,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!'
【问题讨论】:
-
您向我们展示的是类的定义,现在向我们展示您在哪里使用
ChildWidget类?这也是你传递parent的地方。 -
是
self.cw = ChildWidget(self)中的self.cw = ChildWidget(self)括号中的selfclass MainWindow吗? -
是的,这就是你的答案。在这种特殊情况下,
MainWindow中的self是父级,因此MainWindow实例是父级。一般来说,只要有__init__(self, anything),就会在创建该类型的新对象时定义参数anything。 -
所以,
super(ChildWidget, self).__init__(parent)方法中的parent只是发送给MainWindow的__init__方法的参数和隐含的self。困扰我的是__init__(self)只带一个参数,而不是两个 -
那么 parent() 方法从何而来?