2023年9月24日 星期日

Kivy property篇 ReferenceListProperty類 講解

簡述

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使用技巧

沒有

沒有留言:

張貼留言

精選文章

Kivy UIX篇 widget篇 TabbedPanel類 event篇 講解