在Kivy中将小部件居中于StackLayout中

4

我正在尝试将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个回答

1
这可以通过使用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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接