我需要在一个小部件内画一条线。但是我已经看到小部件的相对位置和大小在init方法完成之前是不会被设置的。在
在实例化类的同时,如何在小部件中绘制具有其相对位置和尺寸的图形元素?(我想避开Kv lang)
class Track(Widget):
def __init__(self,**kw):
super(Track, self).__init__(**kw)
with self.canvas:
Color(1,0,0)
Line(points = (self.x, (self.y + self.height) / 2, self.x + self.width, (self.y + self.height) / 2))
用这种方法,它是用100100和0,0的初始大小和位置绘制的,但是小部件在布局中,所以我想用相对位置和大小,我想在init中画出来
我建议放弃这个限制。在
你有三个选择。第一种方法是在一个时钟(}将计算推迟到小部件被定位后(假设为正常布局)但在下一帧之前。缺点是,行将被修复,如果有移动,将与小部件不匹配,例如可能在调整窗口大小时。在
kivy.clock.Clock
)调度函数中绘制它,该函数在小部件被定位之后运行——它应该足以完成Clock.schedule_once(the_func, 0)
,其中{第二个(也是更好的)选项是像现在一样画线,但是绑定到widget pos并调整一个函数的大小以适当地重新定位它。e、 g.
self.bind(pos=self.line_setter, size=self.line_setter)
,并将self.line_setter
作为一种适当的self.line.points = [...]
的方法。您还需要用self.line = Line(...)
保存对行的引用。在第三个(通常也是最好的)选项是使用kv语言,它可以自动为您创建绑定,而不需要额外的语法。在
相关问题 更多 >
编程相关推荐