2015-04-06 2 views
1

Я пытаюсь несколько разлить labels за точный промежуток времени и забыть о них. Я пробовал с sleep() и time.sleep(), но программа началась после того, как я определил и выполнил строки. Вот часть моей программы:Проблемы с задержкой по времени

from time import sleep 
from tkinter import* 
from tkinter import ttk 
root = Tk() 
root.geometry('700x700+400+100') 
root.overrideredirect(1) 
myFrame=Frame(root) 
label1=Label(myFrame, text='Warning!', font=('Arial Black', '26'), fg='red') 


myFrame.pack() 
label1.pack() 

sleep(10) 



myFrame.pack_forget() 
label1.pack_forget() 

Но когда я запускаю программу, подождите 10 секунд и чем выполняет линию (frame и label упакованы и чем немедленно забыть).

Я надеюсь, что это ясно, какая у меня проблема.

+0

@DonkeyKong Я хочу отображать ярлык1 в течение 10 секунд и забыть об этом. – Luka1

+0

И что происходит с вашим текущим кодом? – miradulo

+0

@DonkeyKong, как я уже сказал: 10 секунд он ничего не делает и выполняет всю программу, которую я написал (сделать корень, установить ее геометрию и т. Д.), Но label1 (я думаю, так) упакован ('.pack'), а не сразу забудьте ('.pack_forget()'). – Luka1

ответ

2

Используйте метод Tkinter after вместо time.sleep(), так как time.sleep() почти никогда не должен использоваться в графическом интерфейсе. after назначает функцию, которая будет вызываться через определенное время в миллисекундах. Вы могли бы реализовать это следующим образом:

myFrame.after(10000, myFrame.pack_forget) 
label1.after(10000,label1.pack_forget) 

Обратите внимание, что after не обеспечить функция будет происходить именно в нужное время, это только графики это произойдет после того, как определенное количество времени. В результате однопоточного Tkinter, если ваше приложение занято, может быть измерена задержка в микросекундах (, скорее всего,).

Смежные вопросы