我想使用StackLayout,但它只显示一个按钮而不是我预期的两个按钮。代码是:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
Builder.load_string("""
<ScreenUI>:
orientation: 'lr-bt'
Button:
text: 'Button 1'
Button:
text: 'Button 2'
""")
class ScreenUI(StackLayout):
pass
class WidgetApp(App):
def build(self):
app = ScreenUI()
return app
if __name__ == '__main__':
WidgetApp().run()
如何使用StackLayout并添加Button列表?
更新(包括评论):获取我使用的调整大小行为 Builder.load_string( “”“
<ScreenUI>:
input1: input1
button1: button1
height: self.input1.height
spacing: 5
orientation: 'horizontal'
id: layout1
Label:
text: 'Button 1'
id: button1
size: len(self.text) * root.input1.font_size, 2 * root.input1.font_size
size_hint: None, None
TextInput:
id: input1
text: 'Button 2'
size: root.width - root.button1.width - root.spacing, 2 * self.font_size
size_hint: None, None
""")
是否存在更优雅的方法?
答案 0 :(得分:2)
看起来这是一个size_hint问题。这些按钮没有指定大小,因此StackLayout会根据大小提示自动调整大小。然而,它的布局并不依赖于任何合理的方式,所以它只是使它们100%的自己的大小...意味着只有一个适合窗口。那就是你看到的那个。
以下是您的示例的略微修改版本,其中指定了尺寸。它对我来说很好,左下角有两个不同大小的按钮:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
Builder.load_string("""
<ScreenUI>:
orientation: 'lr-bt'
Button:
text: 'Button 1'
size: 100, 100
size_hint: None, None
Button:
text: 'Button 2'
size_hint: None, None
size: 200, 100""")
class ScreenUI(StackLayout):
pass
class WidgetApp(App):
def build(self):
app = ScreenUI()
return app
if __name__ == '__main__':
WidgetApp().run()
一般来说,解决这个问题的方法是给他们一个合理的大小提示,无论你的特定目标是什么,或者像我一样手动设置他们的大小。如果您希望正确调整某个数字以填充空格或类似数字,则GridLayout或BoxLayout可能更合适。