我找到了条件按钮的代码,但我不明白 on_number(self, obj, value) 代码
I found this code for conditional buttons but I don't understand the on_number(self, obj, value) code
我对 kivy 很陌生。于是网上找了这段代码,on_number的部分看不懂。我知道如果我删除它,数字会更新但它不会重复创建小部件的过程。有人可以解释一下 on_number 的函数是如何工作的以及这三个变量指的是什么吗?
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()
所有 Kivy 属性在更改时都会根据 属性 名称自动调用其 class 的方法。此方法是 on_propertyname
,并传递两个参数:属性 刚刚更改的对象,以及 属性.
的新值
我对 kivy 很陌生。于是网上找了这段代码,on_number的部分看不懂。我知道如果我删除它,数字会更新但它不会重复创建小部件的过程。有人可以解释一下 on_number 的函数是如何工作的以及这三个变量指的是什么吗?
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()
所有 Kivy 属性在更改时都会根据 属性 名称自动调用其 class 的方法。此方法是 on_propertyname
,并传递两个参数:属性 刚刚更改的对象,以及 属性.