Kivy 简明教程
Kivy - Stack Layout
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’。
Example
以下程序演示了 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()