Kivy(kv语言)StackLayout问题和边界问题

时间:2016-04-26 15:31:59

标签: python kivy

我是Kivy的新手,并且仍然在研究使用它的最佳方式。目前,我从他们的回购(文本化演示)中获取示例并尝试在个人项目中使用布局概念。

在一天结束时,我想要的只是一个" navbar"在我的屏幕顶部和它下面的内容部分。目前,我正在尝试使用BoxLayout来完成此任务,其中包括StackLayout(导航项)和GridLayout(其他内容)。

我的代码片段:

<WindowWidget>:
    BoxLayout:
        orientation: 'vertical'
        StackLayout:
            Label:
                text: 'Test1'
            Label:
                text: 'Test1.1'
        Label:
            text: 'Test2'

此代码生成:Kivy Screenshot

我不明白为什么标签1.1被压在标签2的顶部而不是出现在标签1旁边。

我添加了以下来自kivy示例的代码,希望高度设置会增加一些清晰度,但我得到以下错误:

代码:

<StackLayout>:
    size_hint_y: None
    spacing: dp(6)
    padding: dp(6), dp(4)
    height: self.minimum_height

错误:

  

警告,在下一帧之前完成了太多的迭代。检查你的   代码,或增加Clock.max_iteration属性

这是由于我加入了&#34; height:self.minimum_height&#34;线。但是,这在演示中有效,所以我不确定我是如何搞砸它的。我将在下面提供示例的kv代码以供参考。

原文:

BoxLayout:
    orientation: 'vertical'

    HeadingLabel:
        text: 'These modify all demonstration Labels'

    StackLayout:
        # Button is a subclass of Label and can be sized to text in the same way

        Button:
            text: 'Reset'
            on_press: app.reset_words()

        ToggleButton:
            text: 'Shorten'
            on_state:
                app.shorten=self.state=='down'

        ToggleButton:
            text: 'max_lines=3'
            on_state:
                app.max_lines=3 if self.state=='down' else 0

        Spinner:
            text: 'bottom'
            values: 'bottom', 'middle', 'top'
            on_text: app.valign=self.text

        Spinner:
            text: 'left'
            values: 'left', 'center', 'right', 'justify'
            on_text: app.halign=self.text

    GridLayout:
        id: grid_layout
        cols: 2
        height: cm(6)
        size_hint_y: None

        HeadingLabel:
            text: "Default, no text_size set"

        HeadingLabel:
            text: 'text_size bound to size'

        DemoLabel:
            id: left_content
            disabled_color: 0, 0, 0, 0

        DemoLabel:
            id: right_content
            text_size: self.size
            padding: dp(6), dp(6)

    ToggleButton:
        text: 'Disable left'
        on_state:
            left_content.disabled=self.state=='down'

    # Need one Widget without size_hint_y: None, so that BoxLayout fills
    # available space.
    HeadingLabel:
        text: 'text_size width set, size bound to texture_size'
        text_size: self.size
        size_hint_y: 1

    DemoLabel:
        id: bottom_content
        # This Label wraps and expands its height to fit the text because
        # only text_size width is set and the Label size binds to texture_size.
        text_size: self.width, None
        size: self.texture_size
        padding: mm(4), mm(4)
        size_hint_y: None

# The column heading labels have their width set by the parent,
# but determine their height from the text.
<HeadingLabel@Label>:
    bold: True
    padding: dp(6), dp(4)
    valign: 'bottom'
    height: self.texture_size[1]
    text_size: self.width, None
    size_hint_y: None

<ToggleButton,Button>:
    padding: dp(10), dp(8)
    size_hint: None, None
    size: self.texture_size

# This inherits Button and the modifications above, so reset size
<Spinner>:
    size: sp(68), self.texture_size[1]

<DemoLabel@Label>:
    halign: app.halign
    valign: app.valign
    shorten: app.shorten
    max_lines: app.max_lines

    canvas:
        Color:
            rgb: 68/255.0, 164/255.0, 201/255.0
        Line:
            rectangle: self.x, self.y, self.width, self.height

<StackLayout>:
    size_hint_y: None
    spacing: dp(6)
    padding: dp(6), dp(4)
    height: self.minimum_height

TYIA

0 个答案:

没有答案