pygtk关于设置按钮的敏感属性的奇怪问题

时间:2011-03-27 09:01:11

标签: python pygtk

在我的一个方法上,我有以下代码:

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

然而,self.button1只在get_time()返回!!后才变得不敏感,使用time.sleep(n)替换get_time()可以获得相同的结果 有什么线索的原因?

2 个答案:

答案 0 :(得分:3)

我认为小部件的程序化更改适用于事件循环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()

答案 1 :(得分:0)

你确定要这么做吗? 所有GUI编程事件都是通过消息传递完成的,所以你真的不应该阻塞主线程足够长的时间,你需要一些像这样的解决方法。如果你这样做,你很快就会遇到其他问题,比如窗口管理器会杀死你的窗口,因为当你进行迭代时它没有响应ping或重入问题。如果你有一些复杂的任务,如刻录CD或任何花费那么长时间的任务,请将实际刻录放入其自己的可执行文件中,并通过glib.spawn_async(或类似的)调用它。使用gobject.child_watch_add要求收到有关终止的通知。