【问题标题】:Animate canvas Line on KivyKivy 上的动画画布线
【发布时间】:2023-03-19 13:10:01
【问题描述】:

我有一个包含 x 和 y 位置的数组。我想显示这些点为每个点连续连接一条线,然后创建一个动画。这就像一个路径跟踪,其轨迹是线。我正在使用 python-kivy 尝试显示它。

我在谷歌上找不到任何帮助。

有一个按钮可以触发这个动画。

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics.vertex_instructions import Line
from kivy.graphics.context_instructions import Color
from time import sleep

x_moves = [250, 250.4305, 249.8804, 246.0923, 239.7496, 233.8188, 225.7797, 215.8385, 205.8413, 196.6497, 189.7026, 181.2445, 174.9816, 171.9882, 166.1171, 161.6505, 159.9929, 161.1338, 164.853, 168.2874, 170.768, 178.6918, 184.5233, 190.0262, 195.607, 202.0255, 210.5954, 216.1031, 219.6285, 224.9134, 230.2314, 237.7017, 243.7408, 250.5839, 256.2949]
y_moves = [250, 240.0093, 230.0244, 220.7697, 213.0386, 204.9872, 199.0396, 197.9567, 197.7209, 201.6598, 208.8527, 214.1875, 221.9834, 231.5249, 239.62, 248.567, 258.4287, 268.3634, 277.6461, 287.0379, 296.7253, 302.8256, 310.9492, 319.299, 327.5969, 335.2652, 340.4185, 348.7651, 358.1231, 366.6125, 375.0812, 381.7291, 389.6996, 396.9915, 405.2003]

class my_App(App):
    def build(self):
        self.widget = Widget()
        self.widget.on_touch_down = self.touch
        with self.widget.canvas:
            Color(0, 1, 0, 1) #just initial config
            Line(points = [0,0,500,0,500,500,0,500], close = True) #just initial config
        return self.widget

    def touch(self, touch): #executes the animation
        pts = []
        for i in range(len(x_moves)):
            pts.append(x_moves[i])
            pts.append(y_moves[i])
            self.widget.canvas.add(Line(points = pts))
            sleep(0.1)

if __name__ == '__main__':
    obj = my_App()
    obj.run()

这是我的代码不起作用。但这就是想法。

【问题讨论】:

  • 添加错误信息?我不确定我完全理解什么不起作用
  • 其实代码是可以的,但是这样动画没有显示出来。只有在循环运行后,画布才会更新。
  • 谢谢 :) 这就是你应该在问题中包含的内容

标签: python animation canvas line kivy


【解决方案1】:

您正在阻止 UI 更新,因为您的函数没有返回并且您使用 sleep()。出于显而易见的原因,当您的代码运行时,Kivy 不能做任何事情。如果你想在运行更多代码之前等待,你可以使用 Kivy 的Clock。然后 Kivy 将能够更新屏幕。

但您可能应该只看一下 Kivy 的 Animation,它是为了更好地做到这一点而构建的。

【讨论】:

  • 是的...... sleep() 有一个愚蠢的事情。我只是把这个想法说清楚。但很高兴听到Clock 的消息,但我找不到解决问题的方法来实现Animation。我会试试Clock 并提供反馈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 2011-05-24
  • 2020-05-25
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多