Форум сайта python.su
Не могу понять, почему код работает не так, как я предполагаю…
import Tkinter
import time
def test():
time.sleep(4)
New_Bt = Tkinter.Button(root)
New_Bt.pack()
time.sleep(4)
New_Bt = Tkinter.Button(root)
New_Bt.pack()
root = Tkinter.Tk()
Bt = Tkinter.Button(root, command = test)
Bt.pack()
root.mainloop()
Офлайн
import Tkinter
import time
def test():
time.sleep(1)
New_Bt = Tkinter.Button(root)
New_Bt.pack()
root.update()
time.sleep(1)
New_Bt = Tkinter.Button(root)
New_Bt.pack()
root = Tkinter.Tk()
Bt = Tkinter.Button(root, command = test)
Bt.pack()
root.mainloop()
Офлайн
Спасибо огромное. Я благодарен до потери пульса. Задолбался искать ответ. Но почему так?
Помню процедуру update_ideltasks - обновить характеристики окна, а про эту не знал.
Почему программа сама не хочет управлять действиями в предложенной последовательности?
Неужели существуют функции более высшего и более низшего порядка?
Ведь time тоже импортирован…
Или это касается только Tkinter…
Даже если ответа не будет - все равно очень благодарен, потому что предворительно, перед тем как писать, перебрал уже два десятка возможных вариантов.
Офлайн
sleep блокирует текущий поток, в котором крутится mainloop, и добавляются виджеты только после того как исполнится функция test . но она то и повисла.
Как то сумбурно, но надеюсь понятно ? =)
Для задержек лучше использовать after, не нарушая работу программы
import Tkinter
import time
def test():
root.after(2000,foo)
root.after(3000,foo)
def foo():
New_Bt = Tkinter.Button(root)
New_Bt.pack()
root = Tkinter.Tk()
Bt = Tkinter.Button(root, command = test)
Bt.pack()
root.mainloop()
Офлайн
Еще раз спасибо. Очень ценная информация.
Но мне на самом деле для других задач. В моей программе происходит обработка большого количества файлов и пользователю приходиться ждать, пока обработка закончится, а я не могу ему показать процент выполнения задания, что не есть хорошо. Теперь я знаю, что в основных этапах процесса необходимо сделать обновление корневого окна, т.е. root.update ввиду того, что происходит блокировка потока из-за вызова функции обработки и окно самостоятельно не желает обновляться.
Еще раз спасибо… Теперь многие моменты в программе стали более понятными.
Офлайн