2023年8月5日 星期六

Kivy UIX篇 layout篇 Layout類 講解

簡述

Layout的概述請參考Kivy UIX篇 layout篇 概述這邊不再贅述

Layout本身無法被實例化,而是讓AnchorLayout等Layout來繼承它。

Layout使用技巧(適用於所有Layout):

1.可以在Layout裡添加Widget物件,使用方式為縮排後加上Widget物件名稱再加上冒號。

程式碼如下(以GridLayout為例子):

在main.py中寫上此段程式碼:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout


class MyLayout(GridLayout):
    pass


class Myapp(App):
    def build(self):
        return MyLayout()


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

以上程式碼中,我讓MyLayout類繼承GridLayout類,使得在my.kv中的<MyLayout>:可以繼承GridLayout類的特性。(上面的程式碼看過即可,不需深入了解,往後會有更詳細的解說)

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

<MyLayout>:

    rows: 3

    #關於以下Widget物件後續會有更多講解
    Button:
        text: 'A1'
        
    Label:
        text: 'B2'
        
    TextInput:
        text: 'C3'
        
    Slider:
        min: 0
        max: 100
        value: 25 

(上面的程式碼看過就好,不需深入了解,只要知道如何添加Widget物件即可)

執行結果如下:

2.若子物件為Widget物件,則可以在Widget物件內部加入參數size_hint來設定Widget物件的水平與垂直長度,size_hint的兩個值都介於0~1,代表Widget物件的水平與垂直長度是Layout的多少比例。(EX:size_hint: .1,.1代表水平與垂直長度皆為Layout的十分之一)

程式碼如下(以Float Layout為例子):

在main.py中寫上此段程式碼:

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


class MyLayout(FloatLayout):
    pass


class Myapp(App):
    def build(self):
        return MyLayout()


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

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

<MyLayout>:

    Button:
        text: 'A1'
        size_hint: .8,.1 #讓物件依照layout的視窗大小調整長與寬

執行結果如下:

這部分只要心裡有底即可,因為參數size_hint很可能因為Layout特性不同而導致結果不如預期。

程式碼如下(以GridLayout為例子):

在main.py中寫上此段程式碼:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout


class MyLayout(GridLayout):
    pass


class Myapp(App):
    def build(self):
        return MyLayout()


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

在my.kv中此段程式碼:

<MyLayout>:

    rows: 3

    Button:
        text: 'A1'
        size_hint: .8,.1 #讓物件依照layout的視窗大小調整長與寬

執行結果如下:

發現即使指定size_hint為 .8,.1,Button依然佔滿整個版面。

沒有留言:

張貼留言

精選文章

Kivy UIX篇 widget篇 TabbedPanel類 event篇 講解