Python 如何制作加快文本动画速度的文本按钮

Python 如何制作加快文本动画速度的文本按钮,python,tkinter,Python,Tkinter,所以基本上,我有文本,它是逐字打印出来的。使用代码: text = "test" delta = 40 delay = 0 for i in range(len(text) + 1): s = test_string[:i] update_text = lambda s=s: canvas.itemconfigure(variable, text=s) canvas.after(delay, update_text) delay += delta 这都在函数内

所以基本上,我有文本,它是逐字打印出来的。使用代码:

text = "test"

delta = 40
delay = 0
for i in range(len(text) + 1):
    s = test_string[:i]
    update_text = lambda s=s: canvas.itemconfigure(variable, text=s)
    canvas.after(delay, update_text)
    delay += delta
这都在函数内部,让我们调用:def NewEvent()。我想做的是创建一个带有文本“Skip”的文本按钮,它将delta更改为较低的数字,从而在单击时加快动画的速度。我似乎无法理解,通常,当您使文本可点击时,它具有以下内容:

skipbutton = canvas.create_text((400,100), activefill="Medium Turquoise", text="Skip", fill="White", font=('Arial', 30), tags="skip")
canvas.tag_bind('skip', '<ButtonPress-1>', function)

然而,我不知道接下来会发生什么-(跳过是)它的工作,或者即使这将工作在所有。。。任何帮助都将不胜感激。

您制作动画的方式使您的问题很难解决。问题在于,在显示第一帧之前,您正在安排动画的所有帧。要更改速度,您必须取消所有挂起的作业并重新创建新作业。这不是在Tkinter中制作动画的正确方法

更好的解决方案是一次只激活一个作业。为此,您可以使用一个函数来显示一帧动画,然后安排自己在将来再次运行

总体结构如下所示:

if delta is 40 and skip is ____:
    delta = 10
def animate():
    <draw one frame of animation>
    if <there are more frames>:
        root.after(delay, animate)
要启动动画,请为其指定要显示的字符串:

update_text("Hello, world")
此函数取决于延迟的全局变量,编写函数来加速或减慢动画只需要修改此延迟:

def speedup():
    global delay
    delay = int(delay/2)
您可以很容易地通过按钮调用它:

tk.Button(root, text="Speed up!", command=speedup)

您可能应该移动到OO设置,然后您可以将内容保存为实例变量。如果您需要文本按钮,则可以使用
按钮(…,command=function)
如果您想在动画期间更改速度,则无法轻松地执行,因为您使用
after
立即创建所有更新文本回调。您必须使用
after\u cancel
删除所有回调,并再次使用
after
使用新的
delta
创建新回调。我一直在想,您将如何在已有的代码中实现这一点。我用画布文本设置的变量替换了变量。我拍了一张我所拥有的im函数的代码截图,
tk.Button(root, text="Speed up!", command=speedup)