Я пытаюсь вызвать метод родительского класса из дочернего класса. В частности, мой родительский класс — это объект PySide.QtGui.QMainWindow
, а мой дочерний класс — это объект PySide.QtGui.QWidget
; последний должен быть центральным виджетом первого. Я пытаюсь подключить кнопку внутри дочернего элемента к методу в родительском классе. Это работало для меня в прошлом с использованием self.parent().method_name
, но это не работает в приведенном ниже примере, и я не понимаю, почему:
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.setCentralWidget(self.cw)
self.show()
def do_something(self):
print 'doing something!'
class ChildWidget(QtGui.QWidget):
def __init__(self):
super(ChildWidget, self).__init__()
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!'
def main():
app = QtGui.QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Вот ошибка:
self.button2.clicked.connect(self.parent().do_something)
AttributeError: 'NoneType' object has no attribute 'do_something'