2012-08-08 55 views
0
class testWidget(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(testWidget, self).__init__(parent) 
     self.parent = parent 
     self.something() 
    def something(self): 
     self.parent.callme() # self.parent?.... nice? 


class testClass(): 
    def __init__(self): 
     self.widget = testWidget(parent=self) 

test = testClass()python pyqt和父類

在python(pyqt)中處理父類最清潔的方式是什麼? 有比直接調用self.parent更好的方法嗎?

編輯 - 問題2:

class testWidget(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(testWidget, self).__init__(parent) 
     self.say_hello() 
    def say_hello(self): 
     self.parent().hello() # <- works fine here 
    def focusInEvent(self, event): 
     self.parent().hello() # gives error in focusInEvent 


class testClass(QtGui.QWidget): 
    def __init__(self): 
     super(testClass, self).__init__(None) 
     self.widget = testWidget(parent=self) 
    def hello(self): 
     print "hello" 

test = testClass()

AttributeError的:「QWidget的」對象有沒有屬性「你好」

+0

坦率地說,從其子部件調用父窗口小部件方法是一個壞主意。或者把這個方法作爲一個普通的函數,或者使用[event filter](http://stackoverflow.com/questions/9442165/pyqt-mouse-events-for-qtabwidget)[catch focusInEvent event](http:// stackoverflow.com/questions/321656/when-a-qt-widget-gets-focus)。 – warvariuc 2012-08-08 11:52:49

回答

1

如果你想調用這個小部件的父的方法(如果已設置) ,使用QObject.parent()

class TestWidget(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(TestWidget, self).__init__(parent) 
    def something(self): 
     self.parent().callMe() 

class TestClass(QtCore.QObject): 
    def __init__(self): 
     super(TestClass, self).__init__(None) 
     self.widget = TestWidget(parent=self) 
     ... 
    def callMe(self): pass 

test = TestClass() 
+0

謝謝你們!父母()是我一直在尋找的。 雖然我在widget的focusInEvent()上收到錯誤,但會更新 – user1584472 2012-08-08 11:23:08

+0

@ user1584472以上的代碼,如果您已使用佈局,則可能是該小部件已重新創建。我想這不是一個真正的代碼,只是一個模擬? – warvariuc 2012-08-08 11:33:58

+0

是的,是的,等等,只是很快顯示出它的景氣。我沒有在初始點後編輯佈局 – user1584472 2012-08-08 11:35:58