我已经在我的kivy应用中添加了一堆小部件和子小部件。
现在我想在名为Label()
my_label
上绘制一个矩形
with my_label.canvas.before:
Color(0, random.random(), random.random(), random.random())
my_label.rect = Rectangle(
size=[100, 70],
pos=[110, 35]
)
我希望将矩形放在[110, 35]
上,而不是my_label
。但是my_label.pos == [0, 0]
。我如何找到答案
my_label
相对于根的位置,以便我可以正确设置矩形pos
?
使用mylabel.canvas.after
似乎无法改变这种情况。
此标签是动态添加的,因此我无法依赖于kv
中的设置。
答案 0 :(得分:1)
您的绘图代码在其父级布局设置标签位置之前正在运行 - 基本上您遇到的问题是,当标签位置稍后时,您的矩形位置不会更新。
要解决此问题,您应该在必要时进行绑定以移动矩形,例如:
my_label.bind(pos=self.update_rect)
和一种新方法:
def update_rect(self, label, new_pos):
label.rect.pos = label.pos
如果需要,您也可以为尺寸做同样的事情。
如果您使用kv绘制矩形,则会自动创建这些绑定。