我正在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()
答案 0 :(得分:0)
我很抱歉在您的应用程序中进行了重大更改,但是我认为执行诸如扩展'int' object has no attribute variable
而不是向Layout
类添加Layout
这样的事情可以简化代码。我还使用Widget
来设置kv
类的成员。我将大按钮的宽度设置为其纹理(文本)的宽度,以将文本保留在按钮内。
无论如何,这是我认为您想要的代码的我的版本。我使用Home
方法(在更改大小时调用)来重新排列按钮:
on_size