Kivy on python: обязательное свойство для дочернего свойства - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь привязать свойство виджета к свойству его потомка. Я использовал «сеттер», как указано в документации. Однако свойство родителя никогда не изменяется, и его значение остается таким же, как и в начале (Нет).

Любая помощь приветствуется!

Вот мой пример кода:

# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.checkbox import CheckBox
from kivy.uix.label import Label

MESSAGE = "Checkbox active?   '{}'"

class MainScreen(BoxLayout):
    child_state = ObjectProperty()

    def __init__(self, *args, **kwargs):
        super().__init__(orientation="vertical", *args, **kwargs)
        self.checkbox = CheckBox()
        # Why doesn't this work?
        self.bind(child_state=self.checkbox.setter("active"))

        self.label = Label(text=MESSAGE.format(self.child_state))

        self.button = Button(text="Print properties",
                             on_release=self.print_properties)

        self.add_widget(self.checkbox)
        self.add_widget(self.label)
        self.add_widget(self.button)

    def on_child_state(self, *args):
        self.label.text = MESSAGE.format(self.child_state) # Never updated

    def print_properties(self, *args):
        print(f"child_state property {self.child_state}") # Always None
        print(f"checkbox property {self.checkbox.active}") # Changes between True/False
        print()

class MyApp(App):
    def build(self):
        return MainScreen()

if __name__ == '__main__':
    MyApp().run()
...