布局就是定义如何排列小部件
StackLayout
https://kivy.org/doc/stable/api-kivy.uix.stacklayout.html
可以理解为 Box Layout 的增强版,在线性排序的基础上增加了换行效果
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.stacklayout import StackLayout
class ExampleStackLayout(StackLayout):
def __init__(self, **kwargs):
super(ExampleStackLayout, self).__init__(**kwargs)
for i in range(25):
btn = Button(text=str(i), width=40 + i * 5, size_hint=(None, 0.15 + i*0.01))
self.add_widget(btn)
class MyApp(App):
def build(self):
return ExampleStackLayout(orientation = 'rl-tb') # orientation = one of: ['lr-tb', 'tb-lr', 'rl-tb', 'tb-rl', 'lr-bt', 'bt-lr', 'rl-bt', 'bt-rl']
def on_stop(self):
print('应用程序已关闭')
if __name__ == '__main__':
MyApp().run()
orientation 属性决定了排序方向,示例中 rl-tb 的意思是 从右到左-从上到下
代码运行效果如下图所示
AnchorLayout
https://kivy.org/doc/stable/api-kivy.uix.anchorlayout.html
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.anchorlayout import AnchorLayout
class ExampleAnchorLayout(AnchorLayout):
def __init__(self, **kwargs):
super(ExampleAnchorLayout, self).__init__(**kwargs)
btn = Button(text='Hello World', size=(200, 80), size_hint=(None, None))
self.add_widget(btn)
class MyApp(App):
def build(self):
return ExampleAnchorLayout(anchor_x='center', anchor_y='top', padding=[0, 10, 0, 0])
def on_stop(self):
print('应用程序已关闭')
if __name__ == '__main__':
MyApp().run()
代码解释
创建 Anchor Layout 布局,向布局中添加一个按钮
anchor_x 属性其默认值是 ‘center’,可选值有 ‘left’, ‘center’ or ‘right’
anchor_y 属性其默认值是 ‘center’,可选值有 ‘top’, ‘center’ or ‘bottom’
padding 属性其默认值是 [0, 0, 0, 0],分别对应小部件 [左,上,右,下] 与容器的间距
搞不明白这种布局有什么应用场景,有知道的可以评论区告诉我。
以上代码运行效果
网友评论