簡述
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依然佔滿整個版面。
沒有留言:
張貼留言