Найти - Пользователи
Полная версия: Что-то я загнался... Tkinter (python 2.5)
Начало » GUI » Что-то я загнался... Tkinter (python 2.5)
1
4kpt
Не могу понять, почему код работает не так, как я предполагаю…
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()
Ожидаю: После 4 сек добавиться еще одна кнопка, а еще через 4 секунды еще одна.
Рельано: После 8 сек добавляется 2 кнопки.

Поясните, что я делаю не так или не совсем так…
Заранее благодарен.

P.S. Я понимаю, что вопрос абсолютно тупой, но я уже за деревьями леса не вижу.
sp3
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()
4kpt
Спасибо огромное. Я благодарен до потери пульса. Задолбался искать ответ. Но почему так?
Помню процедуру update_ideltasks - обновить характеристики окна, а про эту не знал.

Почему программа сама не хочет управлять действиями в предложенной последовательности?
Неужели существуют функции более высшего и более низшего порядка?
Ведь time тоже импортирован…
Или это касается только Tkinter…
Даже если ответа не будет - все равно очень благодарен, потому что предворительно, перед тем как писать, перебрал уже два десятка возможных вариантов.
sp3
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()
4kpt
Еще раз спасибо. Очень ценная информация.
Но мне на самом деле для других задач. В моей программе происходит обработка большого количества файлов и пользователю приходиться ждать, пока обработка закончится, а я не могу ему показать процент выполнения задания, что не есть хорошо. Теперь я знаю, что в основных этапах процесса необходимо сделать обновление корневого окна, т.е. root.update ввиду того, что происходит блокировка потока из-за вызова функции обработки и окно самостоятельно не желает обновляться.

Еще раз спасибо… Теперь многие моменты в программе стали более понятными.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB