我在理解自定义Properities的使用以及将方法绑定到事件的方法时遇到了问题。 这是我的代码:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.properties import StringProperty
kivy_lang = '''
<MainWidget>:
on_my_property: my_label.text = 'from button bind method via StringProperty' + my_property
Label:
id: my_label
text: root.my_property
Button:
id: my_button
text: 'intro button'
'''
class MainWidget(BoxLayout):
# bind some properties
my_property = StringProperty('0')
def __init__(self, **kwargs):
super(MainWidget, self).__init__(**kwargs)
# if needed to do sth on widget construction
self.ids.my_button.bind(on_press=self.my_method)
def my_method(self,*args,**kwargs):
self.my_property = str(int(self.my_property)+1)
self.ids.my_button.text = 'new'
class MyApp(App):
def build(self):
Builder.load_string(kivy_lang)
return MainWidget()
if __name__ == '__main__':
MyApp().run()
当我运行它时它呈现OK,但是当我点击一个按钮时,我得到了 NameError:名称'my_property'未定义
我尝试使用kv lang中的Button绑定方法(并在python端删除整个' init ()'):
on_press: root.my_method
然后当我按下按钮时,应用程序不会崩溃但没有任何反应
有人可以解释一下如何调整此代码才能工作吗? 我理解代码是一些'混合技术',但我这样做是为了了解不同的方法,所以如果你不把它全部转过来我会很感激:)
答案 0 :(得分:1)
2 /在kv绑定中。 python代码被调用为write,因此你需要&#39;()&#39;在&#39; root.my_method&#39;之后,或该声明无效。