2023年8月13日 星期日

Kivy UIX篇 widget篇 widget類 event篇 講解

若尚未看過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

執行結果如下:


沒有留言:

張貼留言

精選文章

Kivy UIX篇 widget篇 TabbedPanel類 event篇 講解