首页 > 解决方案 > 为什么 GridLayout 位于屏幕的左下方?

问题描述

我正在尝试将按钮添加到 ScrollView。每个按钮都包含带有两个标签(“第一个”和“第二个”)的 GridLayout(一行)。按钮添加没有问题,但带有标签的 GridLayout 位于屏幕的左下角,而不是按钮内部。

我是基维的新手。任何帮助都会很棒。

如果您在代码方面发现一些不好的做法,请告诉我。

输出: 在此处输入图像描述

小部件层次结构:

Screen
-- GridLayout (Blue background) 
---- Label ("Delivery Orders") 
---- ScrollView (Green background) 
------ BoxLayout (Light Blue background) 
-------- GridLayout (Red background)
---------- Button
------------ GridLayout (Yellow background)
-------------- Label ("First")
-------------- Label ("Second")

.kv 文件

<DeliveryOrdersScreen>:
    name: "delivery_orders_screen"
    id: delivery_orders_screen

    canvas.before:
        Color:
            rgba: 0, 0, 1, 1
        Rectangle:
            pos: self.pos
            size: self.size

    GridLayout:
        cols: 1
        size_hint: 0.8, 0.9
        pos_hint: {"center_x" : 0.5, "center_y" : 0.5}
        spacing: 20
        size: self.parent.size
        pos: self.parent.pos

        Label:
            text: "Delivery Orders"
            font_size: 60
            bold: True

        ScrollView:
            size_hint: 1, None
            do_scroll_x: False
            do_scroll_y: True
            size: root.width, root.height - 200
            pos_hint: {'center_x': 0.5}

            canvas.before:
                Color:
                    rgba: 0, 1, 0, 1
                Rectangle:
                    pos: self.pos
                    size: self.size

            BoxLayout:
                id: scroll_box
                orientation: "vertical"
                size_hint: 1, None
                height: self.minimum_height
                spacing: 10

                canvas.before:
                    Color:
                        rgba: 0, 1, 1, 1
                    Rectangle:
                        pos: self.pos
                        size: self.size

                TestLayout:
                    Button:
                        DoubleLayout:

                TestLayout:
                    Button:
                        DoubleLayout:

                TestLayout:
                    Button:
                        DoubleLayout:

<TestLayout>:
    canvas.before:
        Color:
            rgba: 1, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size

    id: test_layout
    size_hint: 1, None
    cols: 1
    spacing: 5

<DoubleLayout>:
    canvas.before:
        Color:
            rgba: 1, 1, 0, 0.5
        Rectangle:
            pos: self.pos
            size: self.size

    id: double_layout
    size_hint: 1, None
    pos: self.pos
    size: self.size
    rows: 1

    Label:
        text: "first"

    Label:
        text: "second"

标签: python-3.xkivy

解决方案


再会。按钮和标签等小部件不充当其他小部件的布局。添加到另一个小部件的任何小部件都将以其默认形式出现(屏幕左下方,大小为 100 x 100 像素)。请查看布局并选择合适的布局来放置您的小部件。


推荐阅读