簡述
ReferenceListProperty類專門將會一起出現的kivy屬性綁在一起,方便程式碼撰寫。若更改ReferenceListProperty,則內部kivy屬性也一並更改。
基本範例
在main.py中寫上此段程式碼:
from kivy.app import App from kivy.uix.gridlayout import GridLayout from kivy.properties import NumericProperty, ReferenceListProperty class MyLayout(GridLayout): a1 = NumericProperty(0.1) a2 = NumericProperty(0.1) a3 = ReferenceListProperty(a1, a2) def btn1(self): self.a3 = 0.9, 0.4 def on_a1(self,instance,x): print('a1 change to {}'.format(self.a3[0])) def on_a2(self,instance,x): print('a2 change to {}'.format(self.a3[1])) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
在以上程式碼中,我在MyLayout中宣告a1與a2為NumericProperty類,其預設值為0.1、a3為ReferenceListProperty物件將a1、a2打包成對,並宣告btn1方法,當btn1方法被呼叫時,指定a3的值為0.9, 0.4,最後,當a1與a2發生改變時,自動呼叫on_a1方法與on_a2方法,分別列印'a1 change to {}'.format(self.a3[0])與'a2 change to {}'.format(self.a3[1])
在my.kv中寫上此段程式碼:
<MyLayout>: rows:2 Button: text:'world' size_hint: root.a3 Button: text: 'A1' size_hint: root.a3 on_press: root.btn1() Button: text:'hello'
執行結果如下:
(若不了解為何GridLayout內的子物件會這樣分布,可以參考Kivy UIX篇 layout篇 GridLayout類 講解)
ReferenceListProperty使用技巧
沒有
沒有留言:
張貼留言