Ваш вопрос немного расплывчатый, и без ссылки на ваш реальный код трудно предположить, что вы делаете неправильно.
Итак, я дам вам несколько советов для чтения, а затем рассуждаю на основе опыта.
Прежде всего, вы, кажется, думаете, что вы можете только поддерживать GUI отзывчивым, используя потоки. Это неправда. Вы также можете писать свой код асинхронно и делать все в однопоточном приложении. Twisted построен на этой модели программирования. Недавно я сделал сообщение в блоге , в котором объясняется, как я создал интерфейс асинхронных задач, и приведены примеры бегунов для CLI и GTK +. Вы можете посмотреть на эти примеры, чтобы увидеть, как задачи могут быть реализованы асинхронно, и пользовательский интерфейс все еще обновляется.
Во-вторых, если вы по какой-то причине предпочитаете использовать потоки, вам нужно немного понять модель потоков GTK +.
Вы должны начать с чтения Записи часто задаваемых вопросов PyGTK по теме , и вам может показаться это сообщение в блоге простым для понимания.
Теперь перейдем к предположениям. Я предполагаю, что вы пытаетесь обновить свой GTK UI из потока, а не обрабатываете блокировку должным образом. Если это так, вам лучше отложить все обновления вашего пользовательского интерфейса, которые вы хотите сделать, из потоков в основной поток с помощью gobject.idle_add (). Таким образом, все вызовы пользовательского интерфейса будут выполняться из основного потока. Это более простая ментальная модель для подражания в вашем программировании.
Как только вы почувствуете, что действительно понимаете модели потоков и блокировок, вы можете рассмотреть возможность обновления пользовательского интерфейса из ваших потоков, но легко пропустить thread_enter () / threads_leave ()