2017-03-07 1 views
1

Donc, je connais la fonction de veille, mais cela ne fonctionne pas comme je m'y attendais. Si je fais quelque chose comme ceci:Comment utiliser "sleep" correctement?

from time import sleep 
print('Something') 
sleep (10) 
print('Something') 

Il fonctionne comment (je pense), il devrait (il imprime une chose, attend puis imprime l'autre). Mais dans mon code ça ne marche pas comme ça. Ceci est tout le code:

from tkinter import * 
from time import sleep 
# Fenster 
window = Tk() 
window.title('Test') 
c = Canvas(window, height=450, width=800) 
c.pack() 

# Bildelemente 
Hintergrund = PhotoImage(file='Hintergrund.gif') 
Background = Label(image=Hintergrund) 
Background.image = Hintergrund 
Background.place(x=0, y=0) 

Boden = PhotoImage(file='Boden.gif') 
Ground = Label(image=Boden) 
Ground.image = Boden 
Ground.place(x=0, y=300) 

Char = PhotoImage(file='Char.gif') 
Character = Label(image=Char) 
Character.image = Char 
Character.pack() 

# Koordinaten ermitteln 
def coordinatesX(id_num): 
    pos = c.coords(id_num) 
    x = (pos[0] + pos[2])/2 
    return x 

def coordinatesY(id_num): 
    pos = c.coords(id_num) 
    y = (pos[1] + pos[3])/2 
    return y 

# Charakter bewegen 
def Char_move(event): 
    if event.keysym == 'Right' and coordinatesX(Char_) < 800 - 50: 
     c.move(Char_, 10, 0) 
     Character.place(x=(coordinatesX(Char_)), y=(coordinatesY(Char_))) 
    if event.keysym == 'Left' and coordinatesX(Char_) > 0: 
     c.move(Char_, -10, 0) 
     Character.place(x=(coordinatesX(Char_)), y=(coordinatesY(Char_))) 
    if event.keysym == 'Up' and coordinatesY(Char_) < 300 and coordinatesY(Char_) > 0: 
     jump() 
     sleep(5) 
     print('NA') 

c.bind_all('<Key>', Char_move) 

def jump(): 
    c.move(Char_, 0, -50) 
    Character.place(x=(coordinatesX(Char_)), y=(coordinatesY(Char_))) 

# Objekt zur Postitionsbestimmung vom Charakter 
Char_ = c.create_oval(0, 0, 50, 50, fill='red') 
c.move(Char_, 100, 223) 
Character.place(x=(coordinatesX(Char_)), y=(coordinatesY(Char_))) 

Dans cette partie, je veux attendre et faire quelque chose (dans ce « exemple » print):

jump() 
sleep(5) 
print('NA') 

Mais quand je lance le programme et a frappé 'Up', il attend, puis l'objet monte et le programme imprime "NA" en même temps. Comment dois-je faire pour que l'objet remonte, il attend et imprime quelque chose?

+0

Examinez-le d'une autre manière - votre question ne concerne pas le sommeil - c'est pourquoi le saut ne rafraîchit pas l'écran – UKMonkey

Répondre

2

Ne pas utiliser le mode veille. Utilisez plutôt la méthode tkinter after.

jump() 
window.after(5000, lambda x: print('NA')) 

Le sommeil gèle votre interface graphique. Le saut est exécuté mais le sommeil empêche le gui d'être redessiné, donc vous ne voyez aucun changement. Après est une méthode de Tk et vous permet de planifier des opérations.