2015-08-17 10 views
1

你能幫我解釋爲什麼print(str(self.parent()))返回MainWindow而self.print_base()返回QWidget? parent()方法在哪裏定義?父母在super(ChildWidget, self).__init__(parent)中轉到MainWindow init或QWidget init?哪一個是子類ChildWidget(PySide)的父類?

import sys 
from PySide import QtGui, QtCore 

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 print_base(self): 
     for base in self.__class__.__bases__: 
      print base.__name__ 

    def __init__(self, parent): 
     super(ChildWidget, self).__init__(parent) 

     print(str(self.parent())) 
     self.print_base() 

     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!' 

回答

1

您正在處理兩種類型的層次結構:1)小部件hierary; 2)python類hiearchy。 「print_base」方法在python POV中列出了所有的基類,而「parent」則返回了附件中的小部件實例。

+0

我需要更多的理論閱讀。我在做和自己學習。所以,基類和父類不是一回事。你能告訴我是'parent()'QWidget的方法嗎? –

+1

是的,父方法在QtWidget的類中實現。 – Carlos