我想使用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并添加按钮列表?
更新(包括注释):要获得我使用的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
""")是否存在一种更优雅的方法?
发布于 2013-11-13 21:05:05
看起来这是一个size_hint问题。这些按钮没有指定大小,因此StackLayout会自动使用大小提示对它们进行大小调整。然而,它的布局并不依赖于任何明智的方法,因此它只会使它们100%的自己的size...meaning只适合窗口。你看到的就是这个。
下面是您的示例的一个稍微修改的版本,其中指定了大小。它对我来说很好,左下角放置了两个大小不同的按钮:
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可能更合适。
https://stackoverflow.com/questions/19963237
复制相似问题