2017-03-07 20 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 afterメソッドを使用してください。

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

睡眠はあなたのGUIがフリーズ。ジャンプが実行されますが、スリープによってguiが再描画されるのを防ぐので、変更は表示されません。 AfterはTkからのメソッドであり、操作をスケジュールすることができます。

関連する問題