关于调整大小时按钮从中心移动的 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'
我遇到了一个奇怪的问题。每当我调整 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'