Окно python tkinter не отвечает [дубликат]

5
задан nbro 28 January 2015 в 03:18
поделиться

1 ответ

Tkinter однопоточный. Обновления экрана происходят при каждом прохождении цикла событий. Каждый раз, когда у вас есть длинная команда, вы мешаете циклу событий завершать итерацию, тем самым предотвращая обработку событий, тем самым предотвращая перерисовку.

Ваше единственное решение: a) использовать поток для длительной работы , b) использовать процесс для длинной команды или c) разбить команду на небольшие куски, чтобы каждый из них мог быть запущен за несколько мс, чтобы вы могли запускать один кусок во время последующих итераций цикла событий. У вас есть еще одно решение, которое периодически вызывает метод update_idletasks виджета, но это скорее обходное решение, чем исправление.

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

3
ответ дан Bryan Oakley 19 August 2018 в 18:51
поделиться
  • 1
    Большое вам спасибо за ваш ответ! Это так ясно. Я попытаюсь использовать поток для длинной команды. Большое спасибо :-) (Btw, что такое B) решение, используя процесс? ) – user 1 June 2012 в 12:04
  • 2
    Хум, еще один вопрос (извините за это) - & gt; pastebin.com/yEGb8MuT Вот функция, которую я хотел бы выполнить щелчком по кнопке ... Но я хотел бы, чтобы эта функция работала в & quot; background & quot; от Tkinter. Я довольно открываю Tkinter, поэтому, если вы можете поставить меня на хороший трек, это должно быть потрясающе. Как вы можете видеть, эта функция на самом деле пронизана резьбой ... так что вы уверены, что я могу потопить Tkinter & amp; Функция ? – user 1 June 2012 в 12:17
Другие вопросы по тегам:

Похожие вопросы: