【问题标题】:How to move a object to a specific location under a certain time? [duplicate]如何在一定时间内将物体移动到特定位置? [复制]
【发布时间】:2018-10-15 08:05:36
【问题描述】:
def showGameFrame():
    count=0
    while count != 400:
        c.move(theFrame, 0, 10)
        c.move(gameLabel, 0, -10)
        playButton.place_forget()
        quitButton.place_forget()
        count = count+1
    if count == 400:
        window.after(30, showGameFrame)
        window.after(3000, logged)
        play1.terminate()

我试图让我的对象向下移动一段时间,但我现在的代码没有显示对象向下或向上浮动的动画。

我想知道是否有正确的方法可以在一定时间内将对象或图像移动到某个位置?

【问题讨论】:

  • 您的代码没有跟踪实际的挂钟时间,它只是在计数。要进行实时计时,您需要使用 timedatetime 模块。
  • @martineau 但是如何将变量更改为可以放入 if 或 while 语句的特定秒数?
  • ACC938: 嗯,time.time() 以秒为单位返回当前时间,所以在初始化之后,再次调用它并从新值中减去之前的值会告诉你从它开始到现在已经过去了多少秒完毕。如果您使用的是 Python 3.3+,您可以使用 time.perf_counter() 执行类似的操作。
  • 想想这样的事情:假设 D 是一个物体的当前位置 (x0, y0) 和它的新位置 (x1, y1) 之间的距离,你想把它从 A 点移动到点 B 在一定的秒数 T 内,那么它将采取的步数取决于更新的速度。作为一个具体的例子,假设 D 是 50 个单位,T 是 2 秒,显示更新率为每秒 10 次(即每 100 毫秒)。这样做需要以每秒 50/2 或 25 个单位的速度移动。如果每秒有 10 次更新,那么这样做需要每次更新移动 25/10 或 2.5 个单位(即该数量 20 次)。

标签: python python-3.x tkinter time


【解决方案1】:

当您使用 '!=' 而不是小于时,有时它可能无法正确检查。如果你使用'

【讨论】:

    【解决方案2】:

    您可以使用时间模块在一定时间内每秒执行一次代码。特别是time.sleep()

    我认为使用您的方法没有任何问题。虽然我确实认为在这种情况下使用

    >>> import time
    >>> count = 0
    >>> while count < 400:
    ...     count += 1
    ...     print(count)
    ...     time.sleep(1)
    ...
    1
    2
    

    您也可以考虑使用带范围的 for 循环而不是 while 循环:

    >>> import time
    >>> for count in range(0,400):
    ...     print(count)
    ...     time.sleep(1)
    ...
    0
    1
    2
    

    如果需要毫秒,请将 time.sleep(1) 更改为 time.sleep(0.001)

    另一种方法:

    >>> import time
    >>> timenow = int(time.time())
    >>> while (int(time.time()) - timenow) < 400:
    ...     print(int(time.time()) - timenow)
    ...     time.sleep(1)
    ...
    0
    1
    2
    3
    4
    5
    

    或者如果您想要毫秒。

    >>> import time
    >>> timenow = time.time()
    >>> while (time.time() - timenow) < 0.4:
    >>>     print(time.time() - timenow)
    >>>     time.sleep(0.001)
    0.0
    0.0019998550415
    0.00300002098083
    0.00399994850159
    0.00499987602234
    0.00599980354309
    0.00799989700317
    0.00899982452393
    0.00999999046326
    

    【讨论】:

    • 不!在 GUI 程序中使用time.sleep(在单独的线程之外)通常是一个非常的坏主意:它将所有内容都置于睡眠状态,因此 GUI 冻结。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多