0

我想使用 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
""")

是否存在更优雅的方法?

4

1 回答 1

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 可能更合适。

于 2013-11-13T21:05:05.740 回答