gpt4 book ai didi

python - after_cancel 用作停止方法

转载 作者:行者123 更新时间:2023-12-05 08:23:56 25 4
gpt4 key购买 nike

我正在尝试使用 after_cancel 来停止简单图像查看器中的动画循环。我已经阅读了关于 Tcl 的文档,在这里和谷歌上进行了搜索,并探索了 python subreddits。我的错误是:

TclError: wrong # args: should be "after cancel id|command"

这发生在以下代码的最后一行(请不要因为使用全局变量而杀了我,这个项目只是一个图像查看器,用于在我们办公室显示天气预报产品):

n_images = 2
images = [PhotoImage(file="filename"+str(i)+".gif") for i in range(n_images)]
current_image = -1

def change_image():
displayFrame.delete('Animate')
displayFrame.create_image(0,0, anchor=NW,
image=images[current_image], tag='Animate')
displayFrame.update_idletasks() #Force redraw

callback = None

def animate():
forward()
callback = root.after(1000, animate)

def forward():
global current_image
current_image += 1
if current_image >= n_images:
current_image = 0
change_image()

def back():
global current_image
current_image -= 1
if current_image < 0:
current_image = n_images-1
change_image()

def stop():
root.after_cancel(callback)

如果有更合适的方法来停止 Tkinter 中的动画循环,请告诉我!

最佳答案

使用 after_cancel 的替代方法是,您可以使用一个额外的全局值来跟踪循环是否应该继续。

should_continue_animating = True

def animate():
forward()
if should_continue_animating:
root.after(1000, animate)

def stop():
global should_continue_animating
should_continue_animating = False

额外的设计提示:将所有函数都放入单个类的方法中可能会很有用。然后你会有 self.current_imageself.should_continue_animating 而不是全局值。如果您想一次为多张图片制作动画,这将是一个不错的设计选择。

关于python - after_cancel 用作停止方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27319580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com