【问题标题】:Tkinter animation without canvas.move()没有 canvas.move() 的 Tkinter 动画
【发布时间】:2017-02-14 08:29:05
【问题描述】:

我想在没有 (!!!) canvas.move() 函数的情况下为画布项目设置动画。

例如,我试过这个:

见下文: 坐标是已知的

def getCoords(i):
     ....
     return coords  #a list

for i in range(4):
     id=canvas.create_oval(getCoords(i))
     canvas.after(1000)
     canvas.delete(id)
     canvas.update()

它不是这样工作的。 怎么了?和/或 在哪里可以找到示例?

【问题讨论】:

  • 您为什么不想使用专门用于移动对象的一个​​功能?
  • 至于你做错了什么:你正在创建一个椭圆,导致程序休眠一秒钟不更新屏幕,然后删除椭圆。
  • 有一个原因:用 coords=[x1,y1,x2,y2] 为线条设置动画,但只有 x2 应该变化。 (例如机器人中的棱柱关节)。
  • 找到了一种方法来做到这一点:见下文 self.cv.create_line(self.x,self.y,self.x+10,self.y+10,width=10,tag=" line") self.cv.after(100, self.moveLine) #--------------------------------- -- def moveLine(self): self.cv.delete("line") self.x+=10 self.y+=10 self.cv.create_line(self.x,self.y,self.x+10,self. y+10,width=10,tag="line") if self.x
  • 好的,所以你不是在移动一条线,而是在让它增长

标签: animation tkinter


【解决方案1】:

您可以使用coords 方法获取和更改画布对象的坐标。

这是一个完整的例子,它在 x 方向上每 100 毫秒增加一个像素:

import Tkinter as tk

def grow(canvas, item):
    (x1,y1,x2,y2) = canvas.coords(item)
    new_coords = (x1, y1, x2+1, y2)
    canvas.coords(item, new_coords)
    root.after(100, grow, canvas, item)

root = tk.Tk()
canvas = tk.Canvas(root)
canvas.pack(side="top", fill="both", expand=True)

item = canvas.create_oval(10, 10, 100, 100, outline="black", fill="red")
grow(canvas, item)

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多