如何找出小部件的位置来绘制矩形?

时间:2015-09-24 03:35:51

标签: android python kivy

我已经在我的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中的设置。

1 个答案:

答案 0 :(得分:1)

您的绘图代码在其父级布局设置标签位置之前正在运行 - 基本上您遇到的问题是,当标签位置稍后时,您的矩形位置不会更新。

要解决此问题,您应该在必要时进行绑定以移动矩形,例如:

my_label.bind(pos=self.update_rect)

和一种新方法:

def update_rect(self, label, new_pos):
    label.rect.pos = label.pos

如果需要,您也可以为尺寸做同样的事情。

如果您使用kv绘制矩形,则会自动创建这些绑定。