Kivy中的小部件定位不正确

时间:2016-03-20 09:21:33

标签: python python-3.x kivy

只需按一下按钮,我就可以将小部件添加到FloatLayout内的ScrollView内。 代码有点太大,所以我加了一个Pastebin link

所以在那段代码中,当我按下一个按钮时(当TextInput下面有一些文字时),它会创建一个Message的实例,但似乎忽略了所有的放置和尺寸说明,将其放在左下角,默认大小(100x100)。为什么会这样?我在创建实例时尝试了pos属性(例如msg_stack.append(Message(pos=(50, 50))),但也被忽略了。我还尝试用FloatLayout替换RelativeLayout,但没有工作。另外,FloatLayout在这种情况下我需要坚持的是什么?也许,GridLayout可以让我更好吗?

1 个答案:

答案 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])

时,在Message()中设置位置

此外,代码......这很痛苦,是的,但最大的是使用&lt; tab&gt;缩进。很有希望让它发挥作用。使用4个空格代替,你将来会给自己带来麻烦。如果你不需要它以这种方式行事,请避免在函数内部使用函数。

要解决此问题,只需在Message()中将self替换为root,并使用pos=root.pos手动定位内部小部件,依此类推。