Python Kivy中的小部件定位不正确

Python Kivy中的小部件定位不正确,python,python-3.x,kivy,Python,Python 3.x,Kivy,只需按下一个按钮,我就可以将小部件添加到滚动视图中的浮动布局。 代码有点太大了,所以我包含了一个粘贴库 因此,在该代码中,当我按下按钮时(当下方的TextInput中有一些文本时),它会创建一个消息的实例,但似乎忽略了所有的放置和大小调整说明,将其以默认大小(100x100)放在左下角。为什么会这样?我在创建实例时尝试过使用pos属性(例如msg\u stack.append(Message(pos=(50,50))),但它也被忽略了。我还尝试用一个RelativeLayout替换FloatLa

只需按下一个按钮,我就可以将小部件添加到
滚动视图
中的
浮动布局
。 代码有点太大了,所以我包含了一个粘贴库


因此,在该代码中,当我按下按钮时(当下方的
TextInput
中有一些文本时),它会创建一个
消息的实例,但似乎忽略了所有的放置和大小调整说明,将其以默认大小(100x100)放在左下角。为什么会这样?我在创建实例时尝试过使用
pos
属性(例如
msg\u stack.append(Message(pos=(50,50))
),但它也被忽略了。我还尝试用一个
RelativeLayout
替换
FloatLayout
,但没有起作用。另外,在这种情况下,
FloatLayout
是我需要坚持的吗?也许,
GridLayout
可以做得更好?

问题是你的
消息()
处于特定的位置,但内部的小部件不是-它们处于默认位置

简单地说,这将向您和(红色警告)解释,您必须单独管理子项的位置,因为它不是例如
BoxLayout
,而是一个简单的
小部件
,它为每个
添加小部件()取默认值

:
画布:
颜色:
rgba:1,0,0,1
矩形:
大小:self.size
pos:self.pos
当您将消息添加到另一个小部件
Message(pos=[200200])

此外,代码…这是痛苦的,是的,但最大的是用于缩进。让它工作起来很有意思。使用4个空格,你将来会省去麻烦。如果你不需要函数内部的函数以这种方式工作,请避免使用函数内部的函数


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

问题是你的
Message()
处于特定位置,但内部小部件不在-它们处于默认位置

简单地说,这将向您和(红色警告)解释,您必须单独管理子项的位置,因为它不是例如
BoxLayout
,而是一个简单的
小部件
,它为每个
添加小部件()取默认值

:
画布:
颜色:
rgba:1,0,0,1
矩形:
大小:self.size
pos:self.pos
当您将消息添加到另一个小部件
Message(pos=[200200])

此外,代码…这是痛苦的,是的,但最大的是用于缩进。让它工作起来很有意思。使用4个空格,你将来会省去麻烦。如果你不需要函数内部的函数以这种方式工作,请避免使用函数内部的函数


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

消息()中设置定位,因为默认情况下,
小部件
需要
pos=[0,0]
大小=[100100]
msg\u stack.append(Message(pos=[200100]))
例如。@KeyWeeUsr,是的,我提到过尝试,仍然是一样的:(你应该重写程序,直到它变小。这样的混乱会把你推入维护地狱。不要在
build
方法中写任何东西,不要在小部件中包含所有逻辑,并且在kv文件/string中包含结构。在
Message()
本身中设置定位,因为默认情况下,
小部件
使用
pos=[0,0]
size=[100100]
msg_stack.append(Message(pos=[200100]))
例如。@KeyWeeUsr,是的,我提到过尝试,但仍然一样:(你应该重写程序,直到它变小。这样的混乱会把你推入维护的地狱。不要用
build
方法编写任何东西,在小部件中包含所有逻辑,并用kv文件/字符串进行结构。
<Message>:
    canvas:
        Color:
            rgba: 1, 0, 0, 1
        Rectangle:
            size:self.size
            pos: self.pos