Окно Tkinter говорит (не отвечает), но код работает

У меня есть программа, которая выполняет длительный процесс после нажатия кнопки действия. По мере запуска процесса корневое окно скажет, что оно не отвечает, хотя я знаю, что программа работает в фоновом режиме. Эта программа будет выпущена для нескольких людей, с которыми я работаю, и я хочу убедиться, что они не волнуются и закрывают окно, когда видят это. Решение, которое у меня есть, – это сидение root.update в цикле процесса, который работает, но я не уверен, что это лучшее решение.

Использование python 3.3

Вот образец кода, поэтому вы получаете представление о том, что я делаю, это вызывается из основного цикла:

def combine(boxes_to, boxes_from, frame): to_value,to_pos = gui.checkBoxes(boxes_to) from_value,from_pos = gui.checkBoxes(boxes_from) frame.destroy() running = Label(root,text="Running please do not close..",font = (16)) running.pack() root.update() map_to = open("map_to",'r') for line in map_to: root.update() process(line) running.destroy() map_to.close() finish = Button(root, text="Done",command=gui.stop) finish.pack() 

One Solution collect form web for “Окно Tkinter говорит (не отвечает), но код работает”

Хотя вы можете вызвать root.update () в своем цикле, это все равно приведет к некоторым (потенциально) нежелательным побочным эффектам.

  1. Программа может действовать лагги, то есть требуется много времени для ответа на ввод пользователя.
  2. Вы можете выполнить только одно действие. Любые другие действия должны дождаться завершения этого.

В качестве альтернативы я бы предположил, что вы реализуете простую многопоточность. Многопоточность Python довольно проста и предотвратит оба этих недостатка. Вы сможете выполнить свой длинный код, сохраняя при этом чистый и отзывчивый интерфейс.

Если ваше приложение тривиально параллелизуемо, вы можете использовать несколько потоков для уменьшения времени выполнения. Ex. Thread 1 обрабатывает записи 1-100, а поток 2 обрабатывает записи 101-200.

  • tkinter в Spyder
  • Переключение между кадрами в меню tkinter
  • Проблема с различием между двумя одинаковыми элементами в меню tkinter
  • Python Tkinter Embed Matplotlib в графическом интерфейсе
  • Исключение с обратным вызовом Tkinter, потому что цикл продолжается в фоновом режиме
  • Полноэкранное приложение Tkinter
  • Как иметь вкладки тетради ttk в разных строках?
  • Как связать ключ пробела с определенным методом в tkinter (python)
  • Запустите бесконечный цикл в backgroung в Tkinter
  • Ошибка Python Tkinter, «Слишком рано создавать изображения»
  • Tkinter international bind
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.