Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Что-то я загнался... Tkinter (python 2.5) [RSS Feed]

#1 Фев. 16, 2012 00:00:15

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Что-то я загнался... Tkinter (python 2.5)

Не могу понять, почему код работает не так, как я предполагаю…

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. Я понимаю, что вопрос абсолютно тупой, но я уже за деревьями леса не вижу.



Офлайн

#2 Фев. 16, 2012 09:17:10

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Что-то я загнался... Tkinter (python 2.5)

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()



Офлайн

#3 Фев. 16, 2012 18:01:38

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Что-то я загнался... Tkinter (python 2.5)

Спасибо огромное. Я благодарен до потери пульса. Задолбался искать ответ. Но почему так?
Помню процедуру update_ideltasks - обновить характеристики окна, а про эту не знал.

Почему программа сама не хочет управлять действиями в предложенной последовательности?
Неужели существуют функции более высшего и более низшего порядка?
Ведь time тоже импортирован…
Или это касается только Tkinter…
Даже если ответа не будет - все равно очень благодарен, потому что предворительно, перед тем как писать, перебрал уже два десятка возможных вариантов.



Офлайн

#4 Фев. 16, 2012 19:11:04

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Что-то я загнался... Tkinter (python 2.5)

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()



Офлайн

#5 Фев. 16, 2012 20:28:25

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Что-то я загнался... Tkinter (python 2.5)

Еще раз спасибо. Очень ценная информация.
Но мне на самом деле для других задач. В моей программе происходит обработка большого количества файлов и пользователю приходиться ждать, пока обработка закончится, а я не могу ему показать процент выполнения задания, что не есть хорошо. Теперь я знаю, что в основных этапах процесса необходимо сделать обновление корневого окна, т.е. root.update ввиду того, что происходит блокировка потока из-за вызова функции обработки и окно самостоятельно не желает обновляться.

Еще раз спасибо… Теперь многие моменты в программе стали более понятными.



Офлайн

  • Начало
  • » GUI
  • » Что-то я загнался... Tkinter (python 2.5)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version