>假设我从Button
继承,添加一个额外的属性:
class MyButton(Button):
value = ObjectProperty(None)
进一步假设value
和按钮的text
属性总是一起更改,例如在方法中
def update_data(self, data):
self.text = data[0]
self.value = data[1]
现在,如果我有一个绑定到text
的回调,它将无法访问新的value
。有没有办法将触发事件延迟到update_data
方法结束(以便对象的状态被合并,就像数据库事务一样)?仅仅绑定到value
是不可靠的,如果不熟悉实现的人在另一种方法中更改了属性分配的顺序怎么办?
您的on_text
方法可以使用Clock.schedule_once(callback, 0)
安排要尽快调用另一个方法。举个例子:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty
from kivy.clock import Clock
Builder.load_string("""
<MyWidget>:
my_button: my_button
MyButton
text: "..."
id: my_button
Button
text: "value_text_order"
on_press: root.value_text_order()
Button
text: "text_value_order"
on_press: root.text_value_order()
""")
class MyButton(Button):
value = ObjectProperty(None)
my_button = ObjectProperty()
def on_text(self, instance, value):
Clock.schedule_once(self.on_test_and_value, 0)
def on_test_and_value(self, *args):
print("text:{} value: {}".format(self.text, self.value))
class MyWidget(BoxLayout):
def value_text_order(self, *args):
self.my_button.value = 'b'
self.my_button.text = 'a'
def text_value_order(self, *args):
self.my_button.text = 'c'
self.my_button.value = 'd'
class MyApp(App):
def build(self):
return MyWidget()
if __name__ == '__main__':
MyApp().run()