2023年8月17日 星期四

Kivy UIX篇 widget篇 Button類 event篇 講解

若尚未看過Kivy UIX篇 widget篇 Button類  attribute篇 講解,建議看完之後對Button有一定了解在看這篇喔

根據官網Button類繼承自kivy.uix.behaviors.button.ButtonBehavior類與kivy.uix.label.Label類,因此Button的event皆來自於此,詳細的可以參考Kivy UIX篇 widget篇 Label類  event篇 講解與其父類的介紹,基本上是通用的。

Button類專用event有以下幾個:

1.on_press:當點擊Button物件的瞬間即觸發事件

2.on_release:點擊Button物件後離開的瞬間即觸發事件

為了不使教學冗長,我們將以上兩種event放在一起呈現

首先在main.py中寫下:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout


class MyLayout(FloatLayout):
    
    #定義函數btn1與btn2
    def btn1(self):
        print('A1')

    def btn2(self):
        print('B2')


class Myapp(App):

    def build(self):
        return MyLayout()


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

在以上程式碼中,我讓MyLayout類繼承GridLayout類,使得在my.kv中的<MyLayout>:可以繼承GridLayout類的特性(有關GridLayout類的詳細教學可以參考此),並且我在MyLayout類中定義我想觸發的函數btn1與btn2。

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

<MyLayout>:

    Button:
        text: 'press me'
        on_press: root.btn1()
        on_release: root.btn2()

在以上程式碼中,我讓Button的event on_press與btn1連結,當點擊Button物件的瞬間即觸發btn1函數,on_release與btn2同理。

執行結果如下:

可以觀察到在按下Button的瞬間(觸發btn1),Pycharm列印出字串'A1',若持續按著,則無任何反應,直到手離開Button的瞬間(觸發btn2),Pycharm列印出字串'B2'。

沒有留言:

張貼留言

精選文章

Kivy UIX篇 widget篇 TabbedPanel類 event篇 講解