0
我在理解自定義特性的用法以及將事件綁定方法的方法時遇到了問題。 這裏是我的代碼:瞭解Kivy特性和綁定方法
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與郎(和刪除在Python端整體「初始化()」):
on_press: root.my_method
,然後當我按下按鈕的應用程序不會崩潰,但什麼也沒有發生
有人可以解釋我如何調整此代碼的工作? 我明白代碼有點「混合技術」,但我這樣做是爲了瞭解不同的方法,所以我將不勝感激,如果你不把它全部圍繞:)
不錯,感謝您的快速回復 - 看起來我畢竟不是那麼遠:) 所以我需要記住: 1)&2) - 在kv lang中':'之後寫什麼不是真的是一個綁定在任何點, **它總是一個python代碼執行'原樣'**當屬性更新(因此'自我。'是需要引用屬性/屬性當前實例的小部件) – simplynail