簡述
BoundedNumericProperty也是存放整數的類,不同於NumericProperty的是,BoundedNumericProperty存在範圍,當BoundedNumericProperty的值超過上下屆時會產生錯誤訊息。
基本範例
在main.py中寫上此段程式碼:
from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.properties import BoundedNumericProperty class MyLayout(FloatLayout): a1 = BoundedNumericProperty(0, min=-5, max=5) def btn1(self): print('The value of a1 was originally',self.a1) self.a1 = self.a1-1 def on_a1(self, instance, x): print('a1 is change to',x) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
在以上程式碼中,我在MyLayout中宣告a1為BoundedNumericProperty類,a1的初始值為0,最大值為5,最小值為-5,並宣告btn1方法,當btn1方法被呼叫時,print('The value of a1 was originally',self.a1)且設新的a1為舊的a1-1,最後,當a1發生改變時,自動呼叫on_a1方法,列印'a1 is change to',x
在my.kv中寫上此段程式碼:
<MyLayout>: Button: id: mybutton text: 'press me' on_press: root.btn1()
執行結果如下:
由結果可以看到當a1的值要從-5變成-6時出錯了(因為超過了當初所設定的最小值)。
BoundedNumericProperty使用技巧:
1.get_max(EventDispatcher obj):取得BoundedNumericProperty的最大值
2.get_min(EventDispatcher obj):取得BoundedNumericProperty的最小值
3.set_max(EventDispatcher obj, value):設定BoundedNumericProperty的最大值
4.set_min(EventDispatcher obj, value):設定BoundedNumericProperty的最小值
以下我用最小值來做示範
在main.py中寫上此段程式碼:
from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.properties import BoundedNumericProperty class MyLayout(FloatLayout): a1 = BoundedNumericProperty(0, min=-5, max=5) def btn1(self): self.property('a1').set_min(self, -10) print(self.property('a1').get_min(self)) self.a1 = self.a1-1 def on_a1(self, instance, x): print('a1 is change to',x) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
在以上程式碼中,我在MyLayout中宣告btn1方法,當btn1方法被呼叫時,a1呼叫set_min()方法,使得a1的最小值更改為-10。
在my.kv中寫上此段程式碼:
<MyLayout>: Button: id: mybutton text: 'press me' on_press: root.btn1()
執行結果如下:
5.bounds:此屬性將回傳BoundedNumericProperty最初設定的max與min值
在main.py中寫上此段程式碼:
from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.properties import BoundedNumericProperty class MyLayout(FloatLayout): a1 = BoundedNumericProperty(0, min=-5, max=5) def btn1(self): self.property('a1').set_min(self, -10) print(self.property('a1').get_min(self)) print(self.property('a1').bounds) #添加此行程式碼以便呈現結果 self.a1 = self.a1-1 def on_a1(self, instance, x): print('a1 is change to',x) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
在my.kv中寫上此段程式碼:
<MyLayout>: Button: id: mybutton text: 'press me' on_press: root.btn1()
執行結果如下:
由以上結果可以看到,雖然我們呼叫set_min使得min修改為-10,但bound的輸出結果依然為(5,-5)而非(5,-10)
沒有留言:
張貼留言