python中的Fen.after函数很奇怪

时间:2016-05-20 15:39:26

标签: python tkinter

我在Tkinter编写了一个Pong游戏,但我遇到了fen.after函数的问题。

我的代码是:

    if xballe2 >= largeur - epaisseur_barre and 0 <= yballe2 <= ypopo1:
        xballe1, yballe1, xballe2, yballe2 = largeur/2 - rayon, hauteur/2 - rayon, largeur/2 + rayon, hauteur/2 + rayon #the ball goes in the middle of the canvas
        fen.after(1000) #wait 1 sec before redefine its values 
        alpha = uniform(0, 2*pi)
        Vx = V * cos(alpha)
        Vy = V * sin(alpha)
        toto += 1
        score1.configure(text = toto) 

我想在球重新开始前等待1秒。此时球已经在中间。但事实恰恰相反:python在重新定义中间球之前等待1秒。

为什么我的代码不起作用?

1 个答案:

答案 0 :(得分:0)

*.after()方法用于启动计时器,该计时器将在经过一定时间后运行代码。它会立即返回。如果你想在你的程序中引入一个延迟,这里有几种方法 - 因为我没有足够的代码来测试它们,这些是概念方法,你可能需要做更多工作才能使它们工作: / p>

概念方法#1

def cleanup_frame()
        alpha = uniform(0, 2*pi)
        Vx = V * cos(alpha)
        Vy = V * sin(alpha)
        toto += 1
        score1.configure(text = toto)

if xballe2 >= largeur - epaisseur_barre and 0 <= yballe2 <= ypopo1:
        xballe1, yballe1, xballe2, yballe2 = largeur/2 - rayon, hauteur/2 - rayon, largeur/2 + rayon, hauteur/2 + rayon #the ball goes in the middle of the canvas
        fen.after(1000, cleanup_frame)  # wait 1 sec before redefine its values 

概念方法#2

import time

if xballe2 >= largeur - epaisseur_barre and 0 <= yballe2 <= ypopo1:
        xballe1, yballe1, xballe2, yballe2 = largeur/2 - rayon, hauteur/2 - rayon, largeur/2 + rayon, hauteur/2 + rayon #the ball goes in the middle of the canvas
        time.sleep(1)  # wait 1 sec before redefine its values 
        alpha = uniform(0, 2*pi)
        Vx = V * cos(alpha)
        Vy = V * sin(alpha)
        toto += 1
        score1.configure(text = toto)