Kivy使用StackLayout

时间:2013-11-13 20:04:26

标签: kivy

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

是否存在更优雅的方法?

1 个答案:

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