Python 3.x 如果x>;x+;z秒后的y:?

Python 3.x 如果x>;x+;z秒后的y:?,python-3.x,tkinter,Python 3.x,Tkinter,我有一个函数contMove(),当我单击按钮时,它会在tkinter窗口中连续移动对象。但是,如果我多次单击运行此函数的按钮,它会加快速度,因为第一个子例程尚未关闭,因为我希望它连续运行,它们会相互重叠,加快移动速度。我不想让它加速,所以我想做一个检查,测试正在改变的X或Y坐标,是否增加了超过我希望的速度,如果是的话,终止子例程。这似乎是一件很普通的事情,但我能找到的关于时间模块的所有信息要么是关于日期和时钟时间,要么是使用time.sleep,但我不能使用它,因为我无法停止运动。对不起,如果

我有一个函数contMove(),当我单击按钮时,它会在tkinter窗口中连续移动对象。但是,如果我多次单击运行此函数的按钮,它会加快速度,因为第一个子例程尚未关闭,因为我希望它连续运行,它们会相互重叠,加快移动速度。我不想让它加速,所以我想做一个检查,测试正在改变的X或Y坐标,是否增加了超过我希望的速度,如果是的话,终止子例程。这似乎是一件很普通的事情,但我能找到的关于时间模块的所有信息要么是关于日期和时钟时间,要么是使用time.sleep,但我不能使用它,因为我无法停止运动。对不起,如果我把代码放在这里的时候把格式弄乱了

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
命令才会查找
moving
的值。因此,如果该值在您调用
之后
的时间和
之后调用该函数的时间之间发生变化,您将获得最新版本

相反,您希望在
之后立即将值赋给
,这样它就不必在运行函数时查找该值。幸运的是,
after
允许您提供传递给函数的位置参数

要修复代码,请删除此行:

mover.after(17, lambda: contMove(moving))
mover.after(17, contMove, moving)
。。。并将其替换为以下行:

mover.after(17, lambda: contMove(moving))
mover.after(17, contMove, moving)

将您的呼叫更改为
after
如下所示,看看是否有帮助:
mover.after(17,contMove,moving)
。我很困惑,您能把它放进去吗?我真的不知道你指的是什么或者你指的是在(17,lambda:contMove(moving))
之后移除移动器,并用移动器替换它。在(17,contMove,moving)
之后。好吧,它仍然有效,但我不知道它有什么区别,你告诉我的没有改变任何东西,最后我发现我只需要使用。在子程序开始时取消。