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