2017-03-07 99 views
1

所以,我知道睡眠功能,但它不工作,我如何預期它的工作。 如果我做這樣的事情:如何正確使用「睡眠」?

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

運行方式(我認爲)應該(它打印一件事,等待,然後打印另一個)。

但在我的代碼中,它不能像那樣工作。 這是整個代碼:

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_))) 

在這一部分,我希望它等待,然後做一些事情(在這個「榜樣」打印):

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

但是當我運行程序和打'Up',它等待,然後對象上升,程序同時打印「NA」。 我該如何做到這一點,使物體上升,它等待,然後打印一些東西?

+0

再看另一種方式 - 你的問題不是關於睡眠 - 這是爲什麼跳轉不刷新屏幕 – UKMonkey

回答

2

不要使用睡眠。改爲使用tkinter方法。

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

睡眠凍結了你的gui。跳轉被執行,但是睡眠阻止了gui被重繪,因此你沒有看到任何改變。之後是來自Tk的方法,並允許您安排操作。