怎么说如果x> z秒后x + y:?

时间:2017-02-20 18:05:33

标签: python-3.x tkinter

我有一个函数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

1 个答案:

答案 0 :(得分:0)

您需要更改使用after的方式。您当前使用它的方式,after命令仅在moving命令实际运行命令时才会查找after的值。因此,如果值在您调用after的时间与after调用该函数的时间之间发生变化,您将获得最新版本。

你想要的是立即将值赋给after,这样它就不必在运行函数时查找值。幸运的是,after允许您提供传递给函数的位置参数。

要修复您的代码,请删除以下行:

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

...并将其替换为此行:

mover.after(17, contMove, moving)