Какое влияние на ребенка оказывает наследование от класса Kivy Widget? - PullRequest
0 голосов
/ 25 августа 2018

Во-первых, напоследок - я не слишком знаком с концепциями ООП, так что это может быть просто некая форма Python, о которой я не знаю.

В Kivy мы можем изменить поведение и внешний видвиджетов путем создания дочерних классов для виджетов, функции которых мы хотим изменить, например:

class MyWidget(Button):
    def __init__(self, **kwargs):
        super(MyWidget, self).__init__(**kwargs)
        self.size_hint = None
        self.size = 200, 100

Затем используйте MyWidget: или <MyWidget> для создания экземпляра виджета в kv .Это хорошо, если я хочу, чтобы мои виджеты были родительскими для корневого виджета, но бывают случаи, когда это не требуется, например, когда требуется временный Popup.

. В этом случае я просто создаютипичный класс, который создается при запуске события.Вот так:

class Interface():
    def __init__(self):    
        btn = Button()
        btn.bind(on_press=self.some_callback)

        self.popup = Popup(content=btn)
        self.popup.open()   

    def some_callback(self, instance):
        print('woo')

И это, по всей видимости, выглядит хорошо, но события виджета (on_press здесь) не вызывают функции обратного вызова ???Функция bind() будет вызывать обратный вызов для события, так как я буду уведомлен, если определение функции обратного вызова имеет неправильный синтаксис, но по какой-то причине содержимое обратного вызова не выполняется - только когда Interface() наследуется от Widget() класс (Interface(Widget): ...).Из документов :

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

btn - это виджет, это экземпляр Button(), который сам является потомком Widget, его метод вообще не связан счто может быть родительским классом Interface, так почему же тогда обратный вызов полностью выполняется только тогда, когда Widget является родительским классом Interface?Что мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...