2023年9月22日 星期五

Kivy property篇 OptionProperty類 講解

簡述

OptionProperty類專門來限定值為特定值,若設定的值不存在於准許值列表內,則會回傳錯誤訊息。預設值為准許值列表內中任意值,若要決定預設值則必須從准許值列表內中挑選。

基本範例

在main.py中寫上此段程式碼:

from kivy.app import App
from kivy.uix.gridlayout  import GridLayout
from kivy.properties import ObjectProperty, OptionProperty


class MyLayout(GridLayout):
    a1 = OptionProperty("None", options=["On", "Off", "None"])

    def btn1(self):
        self.a1 = 'On'

    def btn2(self):
        self.a1 = 'Off'

    def btn3(self):
        self.a1 = 'hello'

    def on_a1(self,instance,x):
        print('a1 change to {}'.format(self.a1))


class Myapp(App):

    def build(self):
        return MyLayout()


if __name__ == '__main__':
    Myapp().run()

在以上程式碼中,我在MyLayout中宣告a1為OptionProperty類,其預設值為None,准許值列表為["On", "Off", "None"],並宣告btn1方法、btn2方法、btn3方法,當以上方法被呼叫時,分別指定a1的值為'On'、'Off'、'hello',最後,當a1發生改變時,自動呼叫on_a1方法,列印'a1 change to {}'.format(self.a1)

在my.kv中寫上此段程式碼:

<MyLayout>:
    rows:2

    Label:
        text:root.a1

    Button:
        text: 'A1'
        on_press: root.btn1()

    Button:
        text: 'B2'
        on_press: root.btn2()

    Button:
        text: 'C3'
        on_press: root.btn3()

在以上程式碼中,我指定Label中text的值為root.a1;當點擊三個Button時,分別呼叫root.btn1()、root.btn2()、root.btn3()方法

執行結果如下:

可以看到當點擊A1 Button、A2 Button時Label的text順利改變為'On'、'Off',但當點擊C3 Button時,回傳錯誤訊息,這是因為在btn3方法中,我們指定a1的值為'hello',但此值並不在准許值列表內,因此回傳錯誤訊息

ReferenceListProperty使用技巧

沒有

沒有留言:

張貼留言

精選文章

Kivy UIX篇 widget篇 TabbedPanel類 event篇 講解