2023年7月28日 星期五

Kivy UIX篇 layout篇 PageLayout類 講解

簡述

根據官方解釋:

The PageLayout class is used to create a simple multi-page layout, in a way that allows easy flipping from one page to another using borders.

意思是PageLayout用於創建簡單的多頁layout,它可以藉由滑動邊框來切換子物件。

示意圖如下:

基本範例

首先在main.py中寫上起手式

from kivy.app import App
from kivy.uix.pagelayout import PageLayout


class MyLayout(PageLayout):
    pass


class Myapp(App):

    def build(self):
        return MyLayout()


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

在以上程式碼中,我讓MyLayout類繼承PageLayout類,使得在my.kv中的<MyLayout>:可以繼承PageLayout類的特性。

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

<MyLayout>:

    # 添加背景顏色(此段只是拿來呈現PageLayout的範圍,後面會有更詳細的解說)
    # 不過畫面幾乎會被添加的子物件填滿,所以看不出什麼效果
    canvas:
        Color:
            rgb: [.112, .358, .132]
        Rectangle:
            pos: self.pos
            size: self.size

    # 添加Button物件 (此段只是拿來呈現Button會如何出現在PageLayout上,後面會有更詳細的解說)
    Button:
        text: 'A1'

    Button:
        text: 'B2'

    Button:
        text: 'C3'

    Button:
        text: 'D4'

    Button:
        text: 'E5'
        

執行結果如下:

PageLayout使用技巧:

1.根據官方敘述:PageLayout does not currently honor the size_hint, size_hint_min, size_hint_max, or pos_hint properties.,意思是PageLayout 當前不支持 size_hint、size_hint_min、size_hint_max 或 pos_hint 屬性,也就是說我們無法調整子物件在PageLayout中的大小與位置。

<MyLayout>:

    canvas:
        Color:
            rgb: [.112, .358, .132]
        Rectangle:
            pos: self.pos
            size: self.size


    Button:
        text: 'A1'
        size_hint: .1, .1 #我們試圖讓物件依照layout的視窗大小調整水平長度與垂直長度

    Button:
        text: 'B2'
        size_hint: .1, .1 #我們試圖讓物件依照layout的視窗大小調整水平長度與垂直長度
	Button:
        text: 'C3'

    Button:
        text: 'D4'

    Button:
        text: 'E5'

執行結果如下:

可以發現與原本程式碼的執行結果相同,沒有因為我們增加size_hint參數而改變大小,符合預期

沒有留言:

張貼留言

精選文章

Kivy UIX篇 widget篇 TabbedPanel類 event篇 講解