如何在z秒后x> x + y:?
问题描述:
我有一个函数contMove(),当我点击一个按钮时,它会不断地移动一个对象穿过tkinter窗口。但是,如果我单击不止一次运行此函数的按钮,它会加速,因为第一个子例程尚未关闭,因为我希望它连续运行,并且它们运行在彼此的顶部,加快了运动速度。我不希望它加速,所以我想要进行检查,测试X或Y坐标是否正在改变,增加的速度超过了我想要的速度,如果是的话,杀死子程序。这看起来似乎是一件普通的事情,但我能找到的有关时间模块的一切都是关于日期和时钟时间,或者是使用time.sleep,但我无法使用它,因为我无法阻止移动。如果对不起,我搞砸了我的代码的格式,当我把它放在这里如何在z秒后x> x + y:?
def contMove(moving):
global a
global b
global X, Y
if moving:
a = a + X
b = b + Y
mover.place(x = a, y = b)
a, b, X, Y = edgeBounce(a, b, X, Y)
mover.place(x = a, y = b)
#would be here
mover.after(17, lambda: contMove(moving))
else:
return
答
你需要改变你如何使用after
。您目前使用它的方式,仅当after
命令实际运行命令时,after
命令才会查找moving
的值。因此,如果值在您拨打after
的时间与after
调用此功能的时间之间发生变化,您将获得最新版本。
你想要的就是立刻给after
赋值,这样它就不必在运行该函数时查找该值。幸运的是after
可以让你提供传递给函数的位置参数。
要解决你的代码,删除此行:
mover.after(17, lambda: contMove(moving))
...以及与此行替换它:
mover.after(17, contMove, moving)
+0
你告诉我什么都没有改变什么,最后我发现我只需要在子程序开始时使用.after_cancel。 – Feesih0ps
更改您到'通话after'的样子,看看是否它有助于:'移动者。(17,移动,移动)'。 –
我很困惑,你能把它放进去吗?我真的不知道你的意思 – Feesih0ps
删除'mover.after(17,lambda:contMove(moving))',并用'mover.after(17,contMove,moving)'替换它。 –