2017-10-22 16 views
0

저는 kivy를 매우 신형입니다. 그래서이 코드를 온라인에서 찾았고 on_number 섹션을 이해하지 못합니다. 삭제할 경우 번호가 업데이트되지만 위젯을 만드는 과정은 반복되지 않습니다. 누군가가 on_number 함수가 어떻게 작동하는지, 세 변수가 참조하는 것을 설명해 주시겠습니까?조건부 버튼에이 코드가 있지만 on_number (self, obj, value) 코드를 이해할 수 없습니다.

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import NumericProperty 
from kivy.lang import Builder 

Builder.load_string(''' 
<SubWidget1>: 
    Label: 
     text: 'number is bigger than 3' 
    Button: 
     text: 'click here to decrease' 
     on_press: root.parent.number -= 1 

<SubWidget2>: 
    Label: 
     text: 'number is smaller than 3' 
    Button: 
     text: 'click here to increase' 
     on_press: root.parent.number += 1 

<MyWidget> 
    number: 0 
''') 

class SubWidget1(BoxLayout): 
    pass 

class SubWidget2(BoxLayout): 
    pass 

class MyWidget(BoxLayout): 
    number = NumericProperty() 

    def __init__(self, *args): 
     super(MyWidget, self).__init__(*args) 
     self.widget = None 
     self._create_widget() 

    def _create_widget(self): 
     print(self.number) 
     if self.widget is not None: 
      self.remove_widget(self.widget) 
     if self.number > 3: 
      self.widget = SubWidget1() 
     else: 
      self.widget = SubWidget2() 
     self.add_widget(self.widget) 

    def on_number(self, obj, value): 
     self._create_widget() 

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

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

답변

1

모든 Kivy 속성이 자동으로 변경하는 경우 속성 이름에 따라 자신의 클래스의 메소드를 호출합니다. 이 메서드는 on_propertyname이며 두 개의 인수가 전달됩니다. 즉, 속성이 방금 변경된 개체와 속성의 새 값입니다.