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

时间:2017-09-15 22:02:18

标签: python kivy kivy-language

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

编辑:这是我的应用在启动时的屏幕截图: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'

2 个答案:

答案 0 :(得分:0)

我不能发表评论,因为我是新用户,所以如果不行,请不要贬低。我想说在高度和宽度上你使用的是dp,而dp并不用于通过改变屏幕尺寸进行自我调整,你应该使用屏幕比率系统,例如size_hint: .25,.48。或pos_hint作为固定职位 希望它会有所帮助。

答案 1 :(得分:0)

您描述的效果对我来说有点意外,但您尝试的方式不会很好,因为它与GridLayout的布局代码不能很好地集成。

您可能希望使用pos_hint来使BoxLayout居中,但这不会直接在GridLayout中工作,因此您可以选择将GridLayout(带有一个col)转换为垂直BoxLayout,或者,如果由于某种原因无法做到这一点,可以将当前BoxLayout换成另一个,这会使size_hint_x保持为1,因此它可以适当地让孩子居中。

切换到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'