关于调整大小时按钮从中心移动的 Kivy 问题 window

Kivy issue regarding buttons moving from center when resizing window

我遇到了一个奇怪的问题。每当我调整 window 大小时,底部 BoxLayout 中的按钮(提交和取消)都会从屏幕中心一直移动到左侧。但是,如果我调整 window 的大小,然后通过屏幕管理器返回到屏幕,它们就会回到中心。有什么建议或有更好的方法让它们居中吗?

编辑:这是我的应用程序启动时的屏幕截图:https://i.imgur.com/wkqx3tN.png

AnchorLayout:
    size_hint_y: None
    height: max(root.height, content.height)
    GridLayout:
        id: content
        cols: 1
        spacing: '8dp'
        padding: '8dp'
        size_hint: (.8, None)
        height: self.minimum_height
        BoxLayout:
            size_hint_y: None
            height: '48dp'
            TextInput:
                id: textField
                multiline: False
        BoxLayout:
            size_hint_y: None
            height: '48dp'
            ProgressBar:
                id: downloadBar
                max: 1
                value: 0
        BoxLayout:
            size_hint: None, None
            height: '48dp'
            width: '150dp'
            center_x: root.center_x
            Button:
                text: "Submit"
                on_press:
                    TextScreen.download_file(textField.text)

            Button:
                text: "Cancel"
                on_press:
                    root.manager.transition.direction = 'left'
                    root.manager.transition.duration = 1
                    root.manager.current = 'Get_Vod'

我想说的是,您使用的是 dp 的高度和宽度,而 dp 不用于随着屏幕尺寸的变化进行自我调整,您应该使用屏幕比例系统,例如 [=12] =].或 pos_hint 固定位置。

你描述的效果有点出乎我的意料,但是你尝试的方式不会很好,因为它不能很好地与GridLayout的布局代码集成。

您可能想使用 pos_hint 使 BoxLayout 居中,但这不能直接在 GridLayout 中工作,因此您可以选择将 GridLayout(使用一个列)转换为一个垂直的 BoxLayout,或者,如果由于某种原因你不能这样做,将你当前的 BoxLayout 换成另一个,这将使 size_hint_x 保持为 1,因此它可以正确居中它的 child.

切换到 BoxLayout

AnchorLayout:
    size_hint_y: None
    height: max(root.height, content.height)
    BoxLayout:
        id: content
        orientation: 'vertical'
        spacing: '8dp'
        padding: '8dp'
        size_hint: (.8, None)
        height: self.minimum_height
        BoxLayout:
            size_hint_y: None
            height: '48dp'
            TextInput:
                id: textField
                multiline: False
        BoxLayout:
            size_hint_y: None
            height: '48dp'
            ProgressBar:
                id: downloadBar
                max: 1
                value: 0
        BoxLayout:
            size_hint: None, None
            height: '48dp'
            width: '150dp'
            pos_hint: {'center_x': .5}
            Button:
                text: "Submit"
                on_press:
                    TextScreen.download_file(textField.text)

            Button:
                text: "Cancel"
                on_press:
                    root.manager.transition.direction = 'left'
                    root.manager.transition.duration = 1
                    root.manager.current = 'Get_Vod'

用 BoxLayout 包装

AnchorLayout:
    size_hint_y: None
    height: max(root.height, content.height)
    GridLayout:
        id: content
        cols: 1
        spacing: '8dp'
        padding: '8dp'
        size_hint: (.8, None)
        height: self.minimum_height
        BoxLayout:
            size_hint_y: None
            height: '48dp'
            TextInput:
                id: textField
                multiline: False
        BoxLayout:
            size_hint_y: None
            height: '48dp'
            ProgressBar:
                id: downloadBar
                max: 1
                value: 0
        BoxLayout:
            size_hint_y: None
            height: '48dp'
            BoxLayout:
                size_hint_x: None
                width: '150dp'
                pos_hint: {'center_x': .5}
                Button:
                    text: "Submit"
                    on_press:
                        TextScreen.download_file(textField.text)

                Button:
                    text: "Cancel"
                    on_press:
                        root.manager.transition.direction = 'left'
                        root.manager.transition.duration = 1
                        root.manager.current = 'Get_Vod'