Пришло время изучать многопоточность!
Происходит то, что графический интерфейс пользователя (основной поток) ожидает возврата метода, чтобы продолжить обновление интерфейса.
Вы будетехотите, чтобы действие кнопки вызывало threading.Thread
вместо запуска тяжелого кода в основном потоке.Вы также захотите создать очередь для доступа к данным из другого потока (поскольку отправка запросов GUI должна выполняться ТОЛЬКО из основного потока).
import threading, Queue #queue in 3.x
my_queue = Queue.Queue()
def go(*args):
my_thread = threading.Thread(target=function_that_does_stuff)
def function_that_does_stuff():
my_queue.put("Logging in...")
do_lots_of_stuff()
my_queue.put("Doing stuff #1...")
do_even_more_stuff()
my_queue.put("Success!")
Тогда вам понадобится функция, котораязапускается, когда происходит событие обновления.
def OnUpdate(*args):
try:
status_text.set(my_queue.get())
except Queue.Empty:
pass