Во-первых, не делайте подкласс threading.Thread
, используйте Thread(target=callable).start()
.
Во-вторых, и, вероятно, причина вашего очевидного блока в том, что gtk.main_iteration
принимает параметр block
, который по умолчанию равен True
, поэтому ваш вызов gtk.main_iteration
будет фактически блокироваться, когда нет событий для повторения , Что можно решить с помощью:
gtk.main_iteration(block=False)
Однако, нет никакого реального объяснения, почему вы бы использовали этот взломанный цикл вместо реального основного цикла gtk. Если вы уже выполняете это внутри основного цикла, я бы сказал, что вы делаете не то, что нужно. Я могу расширить ваши варианты, если вы дадите нам немного больше деталей и / или полный пример.
В-третьих, и это только позже: всегда всегда всегда всегда убедитесь, что вы вызывали gtk.gdk.threads_init
в любом приложении pygtk с потоками. GTK + имеет разные пути кода при работе в потоке, и он должен знать, чтобы использовать их.
Я написал небольшую статью о pygtk и потоках , которая предлагает вам небольшую абстракцию, чтобы вам никогда не приходилось беспокоиться об этих вещах. Этот пост также содержит пример индикатора выполнения.