只需按一下按钮,我就可以将小部件添加到FloatLayout
内的ScrollView
内。
代码有点太大,所以我加了一个Pastebin link
所以在那段代码中,当我按下一个按钮时(当TextInput
下面有一些文字时),它会创建一个Message
的实例,但似乎忽略了所有的放置和尺寸说明,将其放在左下角,默认大小(100x100)。为什么会这样?我在创建实例时尝试了pos
属性(例如msg_stack.append(Message(pos=(50, 50))
),但也被忽略了。我还尝试用FloatLayout
替换RelativeLayout
,但没有工作。另外,FloatLayout
在这种情况下我需要坚持的是什么?也许,GridLayout
可以让我更好吗?
答案 0 :(得分:0)
问题是你Message()
处于某种可能状态,但内部的小部件不是 - 它们处于默认位置。
简单地说,这将向您和docs(红色警告)解释,您必须单独管理孩子的定位,因为它不是例如BoxLayout
,但是一个简单的Widget
,它采用每个add_widget()
<Message>:
canvas:
Color:
rgba: 1, 0, 0, 1
Rectangle:
size:self.size
pos: self.pos
当您将其添加到另一个窗口小部件Message(pos=[200,200])
此外,代码......这很痛苦,是的,但最大的是使用&lt; tab&gt;缩进。很有希望让它发挥作用。使用4个空格代替,你将来会给自己带来麻烦。如果你不需要它以这种方式行事,请避免在函数内部使用函数。
要解决此问题,只需在Message()中将self
替换为root
,并使用pos=root.pos
手动定位内部小部件,依此类推。