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