簡述
ObjectProperty類專門存放物件,預設為None。
基本範例
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.properties import ObjectProperty from kivy.uix.image import Image class MyLayout(GridLayout): #宣告a1為None的ObjectProperty a1 = ObjectProperty(None) #宣告a2為Image的ObjectProperty a2 = ObjectProperty(Image(source='dog.jpg')) def btn1(self): self.a1.add_widget(self.a2) def on_a1(self,instance,x): print('a1 add dog picture') class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
在以上程式碼中,我在MyLayout中宣告a1為ObjectProperty類,其值為None(ObjectProperty會宣告值為None大部分是用來與kv file中的id做連結),宣告a2為ObjectProperty類,其值為Image(source='dog.jpg'),並宣告btn1方法,當btn1方法被呼叫時,a1呼叫add_widget方法將a2加入,最後,當a1發生改變時,自動呼叫on_a1方法,列印'a1 add dog picture'
在my.kv中寫上此段程式碼:
<MyLayout>: rows:2 id:b1 a1:b1 Label: text:'dog' Button: text: 'A1' size_hint: 0.3,0.3 on_press: root.btn1()
在以上程式碼中,我指定MyLayout的id為b1,並將main.py中的a1與my.kv中的b1連結
執行結果如下:
StringProperty使用技巧:
1.如同基本範例所示,main.py中的ObjectProperty與my.kv中的id可以相互連結,以便在main.py中調用my.kv的widget
沒有留言:
張貼留言