Tkinter实现圆弧0至180度往返动画,如何每30度设置停靠节点
实现方案
你只需要在角度更新后判断当前角度是否为30的倍数,若符合条件则延长after方法的调用间隔实现停顿效果即可,修改后的完整代码如下:
import tkinter as tk root = tk.Tk() root.geometry("800x800") root.resizable(0, 0) # 可自定义停顿时长,单位毫秒 PAUSE_DURATION = 500 s = 0 def menjajKanvas(arc): global s if s < 180: s += 1 c.itemconfig(arc, extent=s, fill="red") # 判断是否为30度倍数,设置对应延时 delay = PAUSE_DURATION if s % 30 == 0 else 10 root.after(delay, menjajKanvas, arc) else: shrink_arc(arc) def shrink_arc(arc): global s if s >= 0: s -= 1 c.itemconfig(arc, extent=s, fill="red") # 判断是否为30度倍数,设置对应延时 delay = PAUSE_DURATION if s % 30 == 0 else 10 root.after(delay, shrink_arc, arc) else: root.after(10, menjajKanvas, arc) c = tk.Canvas(root, height=250, width=300, bg="blue") c.pack() arc = c.create_arc(10,50,240,210, extent=150, outline="red", fill='red', tags=("arc",)) menjajKanvas(arc) root.mainloop()
逻辑说明
- 新增
PAUSE_DURATION常量自定义节点停顿时长,调整数值即可修改停顿时间 - 每次更新角度后自动校验是否为30的倍数,符合条件则使用更长的延时调用下一帧动画,实现停顿效果
- 往返过程的节点停顿都会生效,覆盖0°、30°、60°、90°、120°、150°、180°所有停靠节点
内容的提问来源于stack exchange,提问作者grokli
相关产品推荐
相关产品推荐

