这是我的帖子的延续:Using and moving Widgets/Buttons in Kivy
我想在Kivy中的两个节点(省略号)之间创建一条线,以便在移动节点时动态更新端点。这是我目前凌乱的框架:
class GraphEdge(Widget):
def __init__(self, **kwargs):
super(GraphEdge, self).__init__(**kwargs)
with self.canvas:
Line(points=[100, 100, 200, 100, 100, 200], width=1)
pass
我刚刚为点添加了一些占位符值,因为我不确定如何开始使用App中其他小部件的值。
我的最终目标是能够选择两个节点,然后单击一个按钮来添加线条(或更清洁的东西)。我不是要求别人为我制作这个,只是在正确方向上的一些指针会很棒:)。
链接帖子中提供了更多信息,但如果有要求,我很乐意在这里提供更多信息。
感谢。
修改
其他信息:
我想根据某些事件更新该行的位置。例如,如果我将椭圆移动到线上,我希望最近的边与椭圆对齐并跟随它。
def snap_to_node(self, node):
if self.collide_widget(node):
print "collision detected"
self.line.points=[node.pos]
(这只是一次糟糕的尝试,我知道它根本不起作用) 最终目标是能够将“节点”与“边缘”连接起来。
EDIT2:
所以我取得了一些进展。我创建了一个在时钟计划中调用的更新方法:
def update(self, dt):
# detect node collision
self.edge.snap_to_node(self.node)
def snap_to_node(self, node):
if self.collide_widget(node):
print "collision detected"
self.line.points+=node.pos
现在我想这样做,以便我只更新其中一个点集(我的想法是将其中一个行结束捕捉到节点)。
到目前为止,此代码仅检测该行的其中一个点上的集合。附加点不会检测到碰撞。
答案 0 :(得分:5)
Line(points=[100, 100, 200, 100, 100, 200], width=1)
^^你可以用
替换它self.line = Line(points=[100, 100, 200, 100, 100, 200], width=1)
然后稍后通过执行self.line.width = 2
或self.line.points = [200, 100, 100, 200, 200, 100]
等操作来修改该行。
除此之外,我不确定你在问什么,你能更具体一点吗?