Pyside2, как избежать .parent (). Parent (). Parent (). Parent () - PullRequest
0 голосов
/ 29 января 2020

Итак, у меня есть простое приложение pyside2, где я хочу кнопку для обновления виджета счетчика.

Кнопка была разделена на подклассы и имеет функцию, которая вызывает функцию приращения виджета счетчика.

В настоящее время вызов выглядит следующим образом

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

Это довольно уродливо. Как мне сделать этот вызов между виджетами, которые находятся так далеко в иерархии классов.

1 Ответ

0 голосов
/ 29 января 2020

Вы можете передать объект, на который хотите сослаться, другой объект, а затем напрямую получить доступ к атрибуту. Если вы хотите просто сделать синтаксис более приятным, вы можете добавить следующий метод:

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()

Надеюсь, это было полезно!

...