我怎样才能正确使用“睡眠”?

时间:2017-03-07 14:37:00

标签: python-3.x tkinter sleep

所以,我知道睡眠功能,但它不起作用我的预期它的工作方式。 如果我做这样的事情:

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”。 我该如何做到这一点,以便对象上升,等待,然后打印一些东西?

1 个答案:

答案 0 :(得分:2)

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

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

睡眠冻结你的gui。执行跳转但睡眠会阻止gui重绘,因此您看不到任何更改。之后是来自Tk的方法,允许您安排操作。