用Kivy居中和包裹

时间:2018-10-29 20:56:06

标签: python python-3.x kivy

我正在Kivy中构建一个GUI,该窗口需要水平调整大小。我有三个按钮,两个小按钮在一个更大的按钮的两侧,当窗口变得太窄时,我想更改位置。

示例图片

按钮需要居中对齐。我可以通过在任一侧使用填充来做到这一点,但是当窗口变得太小时,填充也会移动到新行,这将使按钮在中心对齐。我也尝试过尝试使用堆栈布局,但是没有设法使任何东西都能正确对齐。

有一个简单的解决方法吗?

最小工作示例:

from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window


class Home(Widget):
    def __init__(self, **kwargs):
        super(Home, self).__init__(**kwargs)

        BUTTON_WIDTH = 0.1
        BUTTON_HEIGHT = 0.1

        layout = StackLayout(orientation='lr-tb',
                             size=(Window.width, Window.height),
                             pos=self.pos
                             )

        self.add_widget(layout)

        button1 = Button(text='1',
                         size_hint=(BUTTON_WIDTH, BUTTON_HEIGHT)
                         )
        big_button = Button(text='big button',
                            size_hint=(3*BUTTON_WIDTH, BUTTON_HEIGHT)
                            )
        button2 = Button(text='2',
                         size_hint=(BUTTON_WIDTH, BUTTON_HEIGHT)
                         )

        layout.add_widget(button1)
        layout.add_widget(big_button)
        layout.add_widget(button2)


class TestApp(App):
    def build(self):
        return Home()


if __name__ == '__main__':
    TestApp().run()

1 个答案:

答案 0 :(得分:0)

我很抱歉在您的应用程序中进行了重大更改,但是我认为执行诸如扩展'int' object has no attribute variable而不是向Layout类添加Layout这样的事情可以简化代码。我还使用Widget来设置kv类的成员。我将大按钮的宽度设置为其纹理(文本)的宽度,以将文本保留在按钮内。

无论如何,这是我认为您想要的代码的我的版本。我使用Home方法(在更改大小时调用)来重新排列按钮:

on_size