Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Kivy的StackLayout中居中放置小部件_Python_Kivy - Fatal编程技术网

Python 在Kivy的StackLayout中居中放置小部件

Python 在Kivy的StackLayout中居中放置小部件,python,kivy,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 它在一定程度上运行良好。例如,当窗口

我试图在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的填充回到左键位置,然后在每行上放置第二个小部件(这很好,它应该如何工作)


在公式中插入一个值,我可以理解为什么会发生这种情况,但我不知道如何修复它。任何帮助都将不胜感激。谢谢。

使用
网格布局
更容易实现这一点。不同大小的按钮和间距为20的按钮的外观如下所示:

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


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

你需要两个文件。首先,
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:
<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:
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()