python pyqt和父类

Posted

技术标签:

【中文标题】python pyqt和父类【英文标题】:python pyqt and parent class 【发布时间】:2012-08-08 11:00:49 【问题描述】:
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) 中处理父类的最简洁的方法是什么? 有没有比直接调用 self.parent 更好的方法?

【问题讨论】:

坦率地说,从其子小部件调用父小部件方法是一个坏主意。要么将该方法作为一个通用函数,要么在任何小部件上使用event filter 到catch focusInEvent event。 【参考方案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()

【讨论】:

谢谢大家! parent() 是我正在寻找的。我在小部件的 focusInEvent() 上遇到错误,将更新上面的代码 @user1584472,如果您使用了布局,则可能是小部件被重新设置了父级。我猜这不是真正的代码,只是一个模拟? 是的 loadui 等。是的,只是快速显示了它的繁荣。我自己没有在初始化点之后编辑布局 self.parent().hello() # gives error in focusInEvent - 此时打印self.parent()以了解它是什么

以上是关于python pyqt和父类的主要内容,如果未能解决你的问题,请参考以下文章

python调用父类方法的三种方式(super调用和父类名调用)

python之类的继承

Python继承父类parent的正确格式为

python继承

Python-类继承

python_基础2