所以,我知道睡眠功能,但它不起作用我的预期它的工作方式。 如果我做这样的事情:
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 :(得分:2)
不要使用睡眠。改为使用tkinter方法。
jump()
window.after(5000, lambda x: print('NA'))
睡眠冻结你的gui。执行跳转但睡眠会阻止gui重绘,因此您看不到任何更改。之后是来自Tk的方法,允许您安排操作。