簡述
根據官方解釋:
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的顏色變得較淡。
沒有留言:
張貼留言