如何将位于同一行的 Kivy 小部件移得更远?
Posted
技术标签:
【中文标题】如何将位于同一行的 Kivy 小部件移得更远?【英文标题】:How to move Kivy widgets that live on the same row further apart? 【发布时间】:2021-12-01 17:50:21 【问题描述】:我正在尝试找到一种方法来保留我在 main.kv 文件头设置中的三个小部件,并将两个外部小部件移到屏幕边缘。这就像一个顶部横幅,显示在每个屏幕上并包含时间、“主页按钮”和“设置按钮”。我有一个 main.kv 布局的绝对狗早餐,我真的不知道如何更改它以使其功能齐全并保持小部件可见。我将包括我正在讨论的部分的框架。
main.kv
GridLayout:
cols: 1
FloatLayout:
GridLayout:
canvas:
Color:
rgb: utils.get_color_from_hex("#000523")
Rectangle:
size: self.size
pos: self.pos
rows: 1
pos_hint: "top": 1, "left": 1
size_hint: 1, .07
GridLayout:
rows: 1
canvas:
Color:
rgb: utils.get_color_from_hex("#000523")
Rectangle:
size: self.size
pos: self.pos
pos_hint: "top": .93, "center_x": .5
size_hint: 1, .03
ImageButton:
id: home_button
source: "icons/home.png"
opacity: 1 if self.state == 'normal' else .5
on_release:
app.change_screen("home_screen")
app.clear_results()
Label:
id: utc_time
markup: True
font_size: '20sp'
text: ""
ImageButton:
id: settings_button
source: "icons/cog.png"
opacity: 1 if self.state == 'normal' else .5
on_release:
app.change_screen("settings_screen")
我发现将我的三个小部件带回一个选项卡(不在GridLayout
下,而是作为FloatLayout
的子级)可以让我将它们重新定位到我想要的位置。这不起作用,因为我在 main.py 中引用它们并参考当前屏幕添加或删除这些小部件。我不断遇到的问题是它一直想在小部件之上添加小部件。我也将包含该功能。
main.py
def home_setting_widgets(self, screen_name): # this is going to display the home and setting widgets once the app has already been opened
home_button = self.root.ids["home_button"]
utc_time = self.root.ids["utc_time"]
settings_button = self.root.ids["settings_button"]
grid_layout = self.root.children[0].children[2]
if screen_name == "login_screen" or screen_name == "signup_screen" or screen_name == "welcome_screen":
grid_layout.remove_widget(home_button) # remove widgets if on the 3 screens listed
grid_layout.remove_widget(utc_time)
grid_layout.remove_widget(settings_button)
self.home_and_setting = False
else:
if self.home_and_setting == False:
grid_layout.add_widget(home_button) # add widgets
grid_layout.add_widget(utc_time)
grid_layout.add_widget(settings_button)
self.home_and_setting = True
我认为如果我将它们从GridLayout
中移出,问题在于它们不会被作为一个组引用,而是作为单独的小部件引用。我目前将它们捆绑在一起并在grid_layout = self.root.children[0].children[2]
行中引用。
我尝试从 main.kv 中删除 GridLayout
s 及其内容,我尝试将小部件“标记”到不同的位置,我尝试以多种不同方式引用小部件。
我要做的就是将“主页按钮”和“设置按钮”稍微分开一点,这让我卡住了。如果有办法在不破坏一切的情况下移动它们,请告诉我。非常感谢您的帮助,谢谢。
【问题讨论】:
【参考方案1】:尝试在具有“主页”、“时间”和“设置”的 GridLayout 中添加一些间距
GridLayout:
rows: 1
spacing: 1000
canvas:
我无法从 kivy 文档页面获取要上传的图片,但 GridLayout kivy 文档有你想要的“间距”信息。
【讨论】:
传奇,谢谢。我会试一试,让你知道进展如何。 效果完全符合我的预期,谢谢!以上是关于如何将位于同一行的 Kivy 小部件移得更远?的主要内容,如果未能解决你的问题,请参考以下文章