Kivy (Python) 一个可滚动的视图,在视图内部一组按钮(可以相乘)站在窗口的底部而不是顶部

问题描述 投票:0回答:1

我有一个运行 Kivy 界面的 Python 代码。在界面中有一个部分,我有一个水平放置的过滤器组(一组按钮、微调器、文本输入框)。用户可以根据需要随意增加此过滤器组(在初始过滤器组下)。这就是为什么此部分位于可滚动视图中的原因。

然而,在运行代码时,初始过滤器组位于视图底部。乘以过滤器组后,您将看不到新创建的过滤器(因为它们是在初始过滤器下创建的,并且由于初始过滤器位于窗口底部,新过滤器在窗口外),除非您向上滚动视图。

所以就功能而言,一切正常。

唯一的问题是视觉;初始过滤器组位于视图底部,上方有一个空白区域。

问题是:如何将过滤器组移动到视图的顶部?

以下是Kivy代码:

ScrollView:
    id: sv
    do_scroll_x: False

    GridLayout:
        cols: 1
        size_hint_y: None
        height: max(self.minimum_height, sv.height)
        padding: 5

        BoxLayout:
            #spacing: 2
            size_hint_y: None
            height: max(self.minimum_height, sv.height)
            padding: 5

            Label:
                text: "1"
                size_hint_x: 0.1
                size_hint_y: 0.25

            Spinner:
                text: "2"
                values: ["A", "B", "C", "D"]
                size_hint_x: 0.2
                size_hint_y: 0.25

            Spinner:
                text: "3"
                values: ["A", "B", "C", "D"]
                size_hint_x: 0.2
                size_hint_y: 0.25

            Spinner:
                text: "4"
                values: ["A", "B", "C", "D"]
                size_hint_x: 0.2
                size_hint_y: 0.25

            TextInput:
                hint_text: "5"
                size_hint_x: 0.2
                size_hint_y: 0.25

            Button:
                text: "+"
                size_hint_x: 0.1
                size_hint_y: 0.25`

ScrollView 下有一个GridLayout。我将其更改为 BoxLayout 并将方向更改为垂直。 我还在滚动视图或网格布局或框布局下尝试了 pos_hint (以防万一我尝试了所有) 同样,功能还可以,但视觉效果仍然相同。

[截图显示滤镜组在底部。我希望过滤器组在初始运行时位于视图的顶部。]

(https://i.stack.imgur.com/6C5Hq.png)

[这是一个gif]

(https://i.stack.imgur.com/Y1quT.gif)

python kivy scrollview
1个回答
0
投票

线路:

height: max(self.minimum_height, sv.height)

是问题的一部分。你可以只使用更简单的:

height: self.minimum_height

在两个地方。但是无论何时使用

self.minimum_height
,该
Layout
的内容都必须定义高度。所以每个
Button
Label
Spinner
TextInput
都必须有明确的高度。所以这是你的 Kivy 代码的修改版本:

ScrollView:
    id: sv
    do_scroll_x: False

    GridLayout:
        cols: 1
        size_hint_y: None
        # height: max(self.minimum_height, sv.height)
        height: self.minimum_height
        padding: 5

        BoxLayout:
            #spacing: 2
            size_hint_y: None
            # height: max(self.minimum_height, sv.height)
            height: self.minimum_height
            padding: 5

            Label:
                text: "1"
                size_hint_x: 0.1
                size_hint_y: None
                height: 30

            Spinner:
                text: "2"
                values: ["A", "B", "C", "D"]
                size_hint_x: 0.2
                size_hint_y: None
                height: 30

            Spinner:
                text: "3"
                values: ["A", "B", "C", "D"]
                size_hint_x: 0.2
                size_hint_y: None
                height: 30

            Spinner:
                text: "4"
                values: ["A", "B", "C", "D"]
                size_hint_x: 0.2
                size_hint_y: None
                height: 30

            TextInput:
                hint_text: "5"
                size_hint_x: 0.2
                size_hint_y: None
                height: 30

            Button:
                text: "+"
                size_hint_x: 0.1
                size_hint_y: None
                height: 30
© www.soinside.com 2019 - 2024. All rights reserved.