Kivy中的小部件位置不正确

2024-04-18 22:50:31 发布

您现在位置:Python中文网/ 问答频道 /正文

只需按一个按钮,我就可以在ScrollView内的FloatLayout中添加小部件。 代码有点太大,所以我包含了一个Pastebinlink

所以在这段代码中,当我按下一个按钮(当下面的TextInput中有一些文本时),它会创建一个Message的实例,但似乎忽略了所有的放置和大小调整指令,把它放在左下角的默认大小(100x100)。为什么会这样?我曾尝试在创建实例时放入pos属性(例如msg_stack.append(Message(pos=(50, 50))),但它也被忽略了。我也尝试过用RelativeLayout替换FloatLayout,但没有成功。另外,在这种情况下,FloatLayout是我需要坚持的吗?也许,一个GridLayout可以让我做得更好?在


Tags: 实例代码pos文本message属性stack部件
1条回答
网友
1楼 · 发布于 2024-04-18 22:50:31

问题是你的Message()处于一定的占有率,但是里面的小部件不是-它们处于默认位置。在

简单地说,这将向您和docs(红色警告)解释,您必须单独管理子对象的位置,因为它不是BoxLayout,而是一个简单的Widget,它为每个add_widget()取默认值

<Message>:
    canvas:
        Color:
            rgba: 1, 0, 0, 1
        Rectangle:
            size:self.size
            pos: self.pos

并在将Message()添加到另一个小部件Message(pos=[200,200])时设置它在Message()中的位置

还有,密码。。。这很痛苦,是的,但最大的问题是使用<;tab>;进行缩进。很想让它成功。用4个空格代替,你以后就不用麻烦了。如果不需要函数的行为方式,请避免在函数内部使用函数。在

要修复它,只需将Message()中的每个self替换为root,并用pos=root.pos手动定位内部小部件,依此类推。在

相关问题 更多 >