【问题标题】:Creating a dynamically drawn line in Kivy在 Kivy 中创建动态绘制的线
【发布时间】:2014-08-12 21:29:59
【问题描述】:

这是我的帖子的延续: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

我刚刚为积分添加了一些占位符值,因为我什至不知道如何开始使用应用程序中其他小部件的值。

我的最终目标是能够选择两个节点并单击一个按钮来添加行(或者更简洁的东西)。我不是要别人为我制作这个,只是一些正确方向的指针会很棒:)。

链接帖子中提供了更多信息,但如果需要,我很乐意在此处提供更多信息。

谢谢。

编辑:

附加信息:

我想根据某些事件更新线条的位置。例如,如果我将一个椭圆移到线上,我希望最近的边缘捕捉到椭圆并跟随它。

def snap_to_node(self, node):
    if self.collide_widget(node):
        print "collision detected"
        self.line.points=[node.pos]

(这只是一个糟糕的尝试,我知道它根本不起作用) 最终目标是能够将“节点”与“边”连接起来。

编辑2:

所以我已经取得了一些进展。我创建了一个在时钟计划中调用的更新方法:

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

现在我想让它只更新一个点集(想法是我将其中一个线端捕捉到节点)。

到目前为止,此代码仅检测在线点之一上的集合。并且附加点不会检测到碰撞。

【问题讨论】:

    标签: python python-2.7 drawing kivy


    【解决方案1】:
    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 = 2self.line.points = [200, 100, 100, 200, 200, 100] 之类的操作来简单地修改该行。

    除此之外,我不确定你在问什么,你能更具体一点吗?

    【讨论】:

    • 嘿,抱歉耽搁了。我正在尝试根据一些输入更新线条点。我会在原帖中举个例子。
    • 设置为答案。这帮助我找到了答案,看起来其他人不会发表评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多