Pyside2,如何避免.parent()。parent()。parent()。parent()

问题描述 投票:0回答:1

因此,我有一个简单的pyside2应用程序,我想在其中使用一个按钮来更新计数器小部件。

按钮已被子类化,并且具有调用计数器小部件的增量功能的功能。

当前通话看起来像这样

self.parent().parent().parent().parent().counter_widget.increment()

这很丑。我应该如何在类层次结构中如此遥远的小部件之间进行此调用。

python design-patterns signals-slots pyside2
1个回答
0
投票

您可以将要引用的对象传递给另一个对象,然后直接访问该属性。如果您只是想简化语法,可以添加以下方法:

def up(self, levels):
    if levels < 0:
        raise ValueError('cannot go up negative levels')
    obj = self
    while levels > 0:
        obj = obj.parent()
        levels -= 1
    return obj

然后代替

self.parent().parent().parent().parent().counter_widget.increment()

您可以简单地写:

self.up(4).counter_widget.increment()

我希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.