Kivy - 堆栈布局
StackLayout 类的对象充当小部件容器,其中子小部件一个挨着一个地放置,水平或垂直放置,具体取决于方向属性。布局尺寸可以容纳尽可能多的小部件。每个小部件的尺寸可以变化。
让我们假设 StackLayout 对象配置为从左到右、从上到下容纳小部件。在水平放置"x"个小部件后,如果无法将"x+1"小部件放在同一行,则将其推到下一行,依此类推,直到布局高度耗尽。
StackLayout 类在"kivy.uix.stacklayout"模块中定义。
from kivy.uix.stacklayout import StackLayout stack = StackLayout(**kwargs)
StackLayout 对象通过定义以下属性 − 进行自定义
minimum_width − 自动计算包含所有子项所需的最小宽度。它是一个 NumericProperty,默认为 0。它是只读的。
minimum_height −自动计算包含所有子项所需的最小高度。它是一个 NumericProperty,默认为 0。它是只读的。
minimum_height − 自动计算包含所有子项所需的最小高度。minimum_height 是一个 NumericProperty,默认为 0。它是只读的。
minimum_size − 自动计算包含所有子项所需的最小大小。minimum_size 是 (minimum_width, minimum_height) 属性的 ReferenceListProperty。它是只读的。
minimum_width − 自动计算包含所有子项所需的最小宽度。minimum_width 是一个 NumericProperty,默认为 0。它是只读的。
orientation −布局的方向。此属性确定小部件如何放置在网格中的连续单元格中。orientation 是一个 OptionProperty。其有效值为 −
'lr-tb' − 单元格按从左到右、从上到下的顺序填充。
'tb-lr' − 单元格按从上到下、从左到右的顺序填充。
'rl-tb' − 单元格按从右到左、从上到下的顺序填充。
'tb-rl' − 单元格按从上到下、从右到左的顺序填充。
'lr-bt' − 单元格按从左到右、从下到上的顺序填充。
'bt-lr' −单元格按从下到上、从左到右的顺序填充。
'rl-bt' − 单元格按从右到左、从下到上的顺序填充。
'bt-rl' − 单元格按从下到上、从右到左的顺序填充。
orientation 属性的默认值为 'lr-tb'。
示例
以下程序演示了 StackLayout 的使用。如前所述,默认方向为 'lr-tb'。按钮的宽度逐渐增加但高度相同,从左到右,然后从上到下排列。
当下一个按钮无法放入当前行时,它将被向下推。每个按钮都标有一个随机生成的唯一数字,介于 1 到 50 之间。
from kivy.app import App from kivy.uix.button import Button from kivy.config import Config from kivy.uix.stacklayout import StackLayout import random Config.set('graphics', 'width', '720') Config.set('graphics', 'height', '400') Config.set('graphics', 'resizable', '1') class StackApp(App): def build(self): stack = StackLayout() width=100 nums=[] for i in range(1, 25): while True: num = random.randint(1,25) if num not in nums: nums.append(num) btn = Button( text = str(num), width=width, size_hint=(None, 0.15) ) width = width+num*2 stack.add_widget(btn) break return stack StackApp().run()
输出
它将生成如下所示的堆栈布局 −
如果您尝试调整窗口大小,按钮的位置将相应更改,它们要么被容纳在上面的行中,要么被推下。
让我们将布局的方向更改为"tb-lr"。
stack = StackLayout(orientation='tb-lr')
再次运行程序并查看更改 −
再次将方向属性更改为"rl-bt"并运行程序+减号;
stack = StackLayout(orientation='rl-bt')
布局开始从右到左、从下到右填充按钮。 结果,结果窗口如下所示 −