Kivy - 如何更改网格布局中元素的大小?

时间:2018-06-12 18:56:16

标签: python kivy

我是kivy框架的新手,我正在尝试使用GridLayout创建三列。在第3列中,我想将元素的宽度更小并且向右对齐(我不想更改整个列宽),但是我的尝试不起作用。

main.py

from kivy.app import App
from kivy.uix.widget import Widget

class AppCore(Widget):
    pass

class TestApp(App):
    def build(self):
        return AppCore()

def run_app():
    TestApp().run()

if __name__ == '__main__':
    run_app()

test.kv

<AppCore>
    GridLayout:
        cols: 3
        size: root.width * 0.8, root.height * 0.8

        row_default_height: 30
        row_force_default: True
        center: root.width / 2, root.height / 2

        Label:
            text: 'hello world'

        TextInput:
            id: text_field
            multiline: False

        Button:
            id: f_but
            padding_right: 0
            width: 10

enter image description here

2 个答案:

答案 0 :(得分:1)

解决方案是在第三列中建立AnchorLayout,并在该布局中设置按钮:

<AppCore>
    GridLayout:
        cols: 3
        size: root.width * 0.8, root.height * 0.8
        row_default_height: 30
        row_force_default: True
        center: root.width / 2, root.height / 2

        Label:
            text: 'hello world'

        TextInput:
            id: text_field
            multiline: False

        AnchorLayout:
            anchor_x: 'right'
            Button:
                id: f_but
                width: 40
                size_hint_x: None

enter image description here

为了更好地想象,让我们放置背景颜色:

<AppCore>
    GridLayout:
        cols: 3
        size: root.width * 0.8, root.height * 0.8
        row_default_height: 30
        row_force_default: True
        center: root.width / 2, root.height / 2

        Label:
            text: 'hello world'

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

        TextInput:
            id: text_field
            multiline: False

        AnchorLayout:
            anchor_x: 'right'
            canvas.before:
                Color:
                    rgba: 0, 0, 1, 1
                Rectangle:
                    pos: self.pos
                    size: self.size
            Button:
                id: f_but
                width: 40
                size_hint_x: None

enter image description here

答案 1 :(得分:0)

尝试size_hint_x: -0.5

而不是第3列元素中的width属性。

使用GridLayout,您可以使用size_hint_x将col高度固定为特定大小。

应用更改:

test.kv

<AppCore>
    GridLayout:
        cols: 3
        size: root.width * 0.8, root.height * 0.8

        row_default_height: 30
        row_force_default: True
        center: root.width / 2, root.height / 2

        Label:
            text: 'hello world'

        TextInput:
            id: text_field
            multiline: False

        Button:
            id: f_but
            padding_right: 0
            size_hint_x: -0.5

希望得到这个帮助。