2016-05-20 6 views
0

Ich bin ein Pong-Spiel in Tkinter Codierung, aber ich habe ein Problem mit der fen.after-Funktion.Fen.after-Funktion in Python ist seltsam

Es ist mein Code:

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) 

Ich mag würde 1 Sekunde vor dem Ball Neustart warten. Zu diesem Zeitpunkt ist der Ball bereits in der Mitte. Aber tatsächlich passiert das Gegenteil: Python wartet 1 Sekunde, bevor er den Ball in der Mitte neu definiert.

Warum funktioniert mein Code nicht?

Antwort

0

Die Methode *.after() wird zum Starten eines Timers verwendet, der nach Ablauf einer bestimmten Zeit Code ausführt. Es kehrt sofort zurück. Wenn Sie eine Verzögerung in Ihr Programm einführen möchten, hier sind ein paar Ansätze - da ich nicht genug von Ihrem Code habe, um sie zu testen, sind dies konzeptionelle Ansätze, müssen Sie möglicherweise mehr tun, damit sie funktionieren:

Konzeptioneller Ansatz # 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 

Konzeptioneller Ansatz # 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)