Ну собственно да, выделение в отдельный поток помогло, но все же странная тема однако.
Пусть поправят меня те, кто шарит лучше, но вроде это норма: графика так или иначе работает в своем цикле событий, а time.sleep-тупо подвешивает этот цикл. Поэтому всегда и все длительные действия либо асинхронно внедряются в общий цикл работы гуя, либо выносятся в отдельный процесс/поток.