2023年8月9日 星期三

Kivy UIX篇 widget篇 widget類 attribute篇 講解

簡述

根據官方解釋:

The Widget class is the base class required for creating Widgets.

意思是Widget類是創建Widget物件所需的子類。

在之前的介紹中無論是layout篇還是widget篇,他們的父類都是Widget類,因此通常適用Widget類中的屬性與方法,但還是必須根據每個layout與widget的特性來決定結果(一個經典點例子就是加入Box Layout的widget並不能隨心所欲的調整widget的大小)。

基本範例

首先在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()

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

接下來的所有範例的main.py皆相同,只會根據不同情況調整my.kv

widget使用技巧:

一、決定widget物件位置

1.pos參數可以用來決定Widget物件的左下角的點在什麼絕對位置、center參數可以用來決定Widget物件的中心點在什麼絕對位置。

程式碼如下:

<MyLayout>:

    Button:
        pos:0,0 #可以去比較pos:200,200與pos:0,0的差別
        size_hint:.1,.1
        text: 'press me'
        

執行結果如下:

2.pos_hint參數可以用來決定Widget物件的左下角的點在什麼相對位置,參考點為視窗左下角,參數的格式為{'x':.A, 'y':.B},代表Widget物件的左下角的點落在以視窗的左下角的點為參考點,往右視窗水平長度的0.A倍,往上視窗垂直長度的0.B倍。

示意圖如下:

程式碼如下:

<MyLayout>:

    Button:
        pos_hint: {'x':.8, 'y':.8}
        size_hint:.1,.1
        text: 'press me'

執行結果如下:

上面程式碼代表Widget物件的左下角的點落在以視窗的左下角的點為參考點,往右視窗水平長度的0.8,往上視窗垂直長度的0.8(注意:若視窗的水平與垂直長度改變,則Widget物件的水平與垂直長度也跟著改變)

二、決定widget物件大小

1.size參數可以用來決定Widget物件的絕對大小,預設值為100, 100(注意:在使用時必須先宣告參數size_hint: None,None,否則size參數的設定無效)

程式碼如下:

<MyLayout>:

    Button:
        size_hint: None,None #必須添加
        size: 100,100 #否則此行無效
        text: 'press me'

執行結果如下:

2.size_hint參數可以用來決定Widget物件的相對水平與垂直長度,參考長度為視窗的水平與垂直長度,參數的格式為size_hint: 0.A,0.B,代表Widget物件的水平長度為視窗水平長度的0.A倍,垂直長度為視窗垂直長度的的0.B倍,預設值為1, 1。

示意圖如下:

程式碼如下:

<MyLayout>:

    Button:
        size_hint: .3, .3
        text: 'press me'

執行結果如下:

3.參數size_hint_max與size_hint_min可以用來決定widget物件的大小,與size不同的是,當參數size_hint_max的參數值超過size_hint或size_hint_min的參數值低於size_hint,則widget物件大小由size_hint決定

程式碼如下:

<MyLayout>:

    Button:
        size_hint_max: 100000,100000
        size_hint: .3, .3
        text: 'press me'

執行結果如下:

很明顯size_hint_max的參數值超過視窗的0.3,因此widget物件的大小為視窗的0.3

程式碼如下:

<MyLayout>:

    Button:
        size_hint_max: 50,50
        size_hint: .3, .3
        text: 'press me'

執行結果如下:

size_hint_max的參數值沒有視窗的0.3,因此widget物件的大小為50

size_hint_min依此類推

三、決定物件的不透明度,需要注意的是子物件的不透明度取決於子物件的不透明度*父物件的不透明度,例如如果父物件的不透明度參數值為 0.5,子物件的不透明度參數值為 0.2,則子物件的實際不透明度為 0.5 * 0.2 = 0.1。

程式碼如下:

<MyLayout>:

    Button:
        opacity: .6
        text: 'press me'

執行結果如下:

可以發現Button的顏色變得較淡。

沒有留言:

張貼留言

精選文章

Kivy UIX篇 widget篇 TabbedPanel類 event篇 講解