将小部件置于Kivy中的StackLayout中

时间:2015-09-28 22:34:31

标签: python kivy

我正在尝试将小部件水平放置在StackLayout中,但我既是新手又不是很擅长数学,并且无法绕过正确的公式。 StackLayout中的每个小部件都是128像素宽,每个小部件之间的间距是20像素。这就是我所拥有的:

padding: ((root.width - ((int((root.width - ((int(root.width / 128) - 1) * 20)) / 128) - 1) * 20)) % 128) / 2, 0, 0, 0
spacing: 20

它很有效。例如,当窗口宽度是高达255像素的任何数量时,它每行完美地集中一个128像素的小部件。但是一旦窗口大小调整为256像素宽,然后每个小部件都向左硬化,填充为0.当我将窗口宽度从256增加到275时,填充将依次增加。在276像素宽的小部件上,小部件以0填充回弹到硬左侧位置,然后在每一行上放置第二个小部件(这很好,它应该如何工作)。

在公式中插入一个值,我可以看出为什么会发生这种情况,但我只是不确定如何修复它。任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

使用GridLayout更容易实现。对于不同大小的按钮和间距为20

,它将如下所示

enter image description here

诀窍是放两个虚拟小部件来填充边上的空格(,因为默认size_hint是1,1 ):

代码示例

您需要使用size参数运行以下示例来控制窗口的大小(或者您可以使用鼠标缩小它):

python gridlayout.py --size=500x30

你需要两个文件。首先是gridlayout.kv

<GridLayout>:
    rows: 1
    spacing: 20

    Widget:
    Button:
        text: 'A'
        size_hint: None, 1
        width: 25
    Button:
        text: 'B'
        size_hint: None, 1
        width: 50
    Button:
        text: 'C'
        size_hint: None, 1
        width: 25
    Widget:

第二,python代码gridlayout.py

import kivy

from kivy.app import App
from kivy.uix.gridlayout import GridLayout

class GridLayoutApp(App):
    def build(self):
        return GridLayout()

if __name__=="__main__":
    GridLayoutApp().run()