若尚未看過Kivy UIX篇 widget篇 widget類 attribute篇 講解,建議看完之後對widget有一定了解在看這篇喔
根據官網widget類繼承自kivy.uix.widget.WidgetBase
在此篇教學中,我們使用Label來做為widget的示範(因為Label沒有過多雜質)
on_touch_down: (touch,)、on_touch_move: (touch,)、on_touch_up: (touch,)分別控制當widget被按下、滑動,放開時的反應,以下用一個實例來示範以上三種
首先在main.py中寫下程式碼:
from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.properties import ObjectProperty from kivy.properties import NumericProperty from kivy.uix.label import Label class MyLayout(FloatLayout): a1 = ObjectProperty(None) num = NumericProperty() def btn1(self): self.a1.text = 'start' self.num = 0 def btn2(self): self.num = self.num+1 self.a1.text = '{}'.format(self.num) def btn3(self): self.a1.text = 'finally total is {}'.format(self.num) class Myapp(App): def build(self): return MyLayout() if __name__ == '__main__': Myapp().run()
在以上程式碼中
(1)在MyLayout類中宣告a1為ObjectProperty類、num為NumericProperty類
(關於更多有關kivy屬性的介紹可以參考property篇)
(2)當呼叫函數btn1時,使得a1物件的text屬性為'start'
(3)當呼叫函數btn2時,使得self.num為原來的self.num加1,並且讓a1物件的text屬性為'{}'.format(self.num)
(4)當呼叫函數btn3時,讓a1物件的text屬性為'finally total is {}'.format(self.num),並且讓self.num設為0
在my.kv中寫上此段程式碼:
<MyLayout>: a1: b1 Label: id: b1 text: 'A1' pos_hint: {'x':.1,'y':.1} size_hint: None, None size: 200,200 on_touch_down: root.btn1() #按下時觸發函數btn1 on_touch_move: root.btn2() #移動時觸發函數btn2 on_touch_up: root.btn3() #放開時觸發函數btn3
執行結果如下:
沒有留言:
張貼留言