Странная проблема pygtk по поводу чувствительного свойства кнопки set - PullRequest
1 голос
/ 27 марта 2011

в одном из моих методов у меня есть следующий код:

def fun():
   self.button1.set_sensitive(False)
   self.get_time()

Однако self.button1 становится нечувствительным только после возврата get_time () !!, используйте time.sleep (n) вместоget_time () может получить тот же результат Любая подсказка, почему?

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

Я думаю, что программные изменения виджетов применяются на следующем этапе цикла событий (gtk.main()), то есть, вероятно, после завершения функции fun.Это создает проблемы для вас?Сколько времени занимает self.get_time()?Если это занимает разумное время, вы можете обновить виджеты до этого:

def fun():
   self.button1.set_sensitive(False)
   while gtk.events_pending():
       gtk.main_iteration_do(False)
   self.get_time()
0 голосов
/ 28 марта 2011

Э-э, ты уверен, что хочешь это сделать?Все события программирования GUI выполняются передачей сообщений, и поэтому вам не следует блокировать основной поток достаточно долго, вам когда-нибудь понадобится обходной путь, подобный этому.И если вы сделаете это, у вас скоро появятся другие проблемы, такие как оконный менеджер, убивающий ваше окно, потому что он не реагирует на проблемы проверки связи или повторного входа при выполнении итерации.Если у вас есть какая-то сложная задача, например, запись компакт-диска или что-то еще, что занимает много времени, поместите фактическую запись в собственный исполняемый файл и вызовите его с помощью glib.spawn_async (или аналогичного).Используйте gobject.child_watch_add, чтобы запросить уведомление о прекращении.

...