gpt4 book ai didi

python - Kivy:获取固定大小的小部件以显示在窗口中央

转载 作者:行者123 更新时间:2023-12-01 05:13:18 26 4
gpt4 key购买 nike

几个小时以来我一直在为这个问题烦恼。我有一个自定义小部件,它是 RelativeLayout 的子类,它需要具有固定大小。我希望这个小部件显示在窗口的中央。我还希望在它周围显示其他普通的小部件(即按钮)。在花了一整天的时间让这个东西居中之后,我现在发现,在添加一个按钮后,它会抵制我让它发挥作用的所有尝试。请有人看一下我的 .kv 文件并告诉我哪里出错了?

#:kivy 1.8.0

# This is my fixed-size widget
<DrawableGrid>:
# Note: this is just an example size to keep things simple
size: 500, 500
canvas:
Color:
rgba: 1, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size

# This subclasses BoxLayout
CustomLayout:
orientation: "vertical"

# I put my DrawableGrid inside an AnchorLayout in the hope that it might
# behave in some way like the documentation says it does. No such luck.
# This should be taking up the entire top half of the window.
AnchorLayout:
size_hint: 1, 1
# This anchor_x/anchor_y stuff seemingly does nothing.
anchor_x: "center"
anchor_y: "center"

# This should be appearing as a red rectangle of size 500x500
DrawableGrid:
# This next line was needed to set a custom size in the first place
size_hint: 0, 0

# This appears exactly as expected, filling the bottom half of the window.
Button:
id: next_button
text: "Next"

所以,重申一下,我目前想要的是:

  • 窗口水平分成两半(即上半部分和下半部分)
  • 上半部分应包含我的自定义小部件,大小为 500x500,居中,没有其他内容。这应该显示为红色方 block 。
  • 下半部分应包含一个带有文本“下一步”的按钮,填充整个下半部分。

我实际得到的是这样的: Screenshot(如您所见,红色方 block 明显缺失)

我尝试了很多不同的方法(有些方法比其他方法更hacky)来完成这项工作,但没有成功。请有人告诉我如何解决这个问题?

最佳答案

我认为你想要一个垂直的 BoxLayout 作为你的根小部件。根目录中的第一个小部件将是relativelayout,第二个小部件将是您的按钮。这将为您提供 50/50 的分屏。 relativeLayout 将包含您的 500x500 小部件,其位置为 (self.parent.width-self.width)/2, (self.parent.height-self.height)/2

注意:在下面的代码示例中,我使用 100x100 作为小部件,因为 500x500 不适合我的屏幕。

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout


kv = """
<Test>:
orientation: "vertical"
RelativeLayout:
GridLayout:
pos: (self.parent.width-self.width)/2, (self.parent.height-self.height)/2
size_hint: None, None
size: 100, 100
canvas:
Color:
rgba: 1, 0, 0, 1
Rectangle:
pos: self.pos
size: self.size

Button:
text: "Next"
"""

Builder.load_string(kv)


class Test(BoxLayout):
def __init__(self, **kwargs):
super(Test, self).__init__(**kwargs)


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

if __name__ == '__main__':
TestApp().run()

关于python - Kivy:获取固定大小的小部件以显示在窗口中央,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23741405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com