Python pygtk';设置按钮的奇怪问题';敏感特性

Python pygtk';设置按钮的奇怪问题';敏感特性,python,pygtk,Python,Pygtk,在我的一个方法中,我有以下代码: def fun(): self.button1.set_sensitive(False) self.get_time() 但是,self.button1只有在get_time()返回之后才变得不敏感!!,使用time.sleep(n)替换get_time()可以得到相同的结果 有什么线索吗?我认为程序对小部件的更改适用于事件循环的下一圈(gtk.main()),这可能是在完成fun函数之后。这会给你带来麻烦吗?多少时间self.get\u time

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

def fun():
   self.button1.set_sensitive(False)
   self.get_time()
但是,self.button1只有在get_time()返回之后才变得不敏感!!,使用time.sleep(n)替换get_time()可以得到相同的结果
有什么线索吗?

我认为程序对小部件的更改适用于事件循环的下一圈(
gtk.main()
),这可能是在完成
fun
函数之后。这会给你带来麻烦吗?多少时间
self.get\u time()
拿?如果这需要一段合理的时间,您可以在此之前更新小部件:

def fun():
   self.button1.set_sensitive(False)
   while gtk.events_pending():
       gtk.main_iteration_do(False)
   self.get_time()

嗯,你确定你想这么做吗?
所有GUI编程事件都是通过消息传递来完成的,因此您真的不应该将主线程阻塞足够长的时间,因为您可能需要这样的解决方法。如果您这样做,您很快就会遇到其他问题,例如窗口管理器会终止您的窗口,因为在您进行迭代时,它不会响应ping或重入问题。如果您有一些复杂的任务,如刻录CD或其他需要很长时间的任务,请将实际刻录放入其自己的可执行文件中,并通过glib.spawn_async(或类似方式)调用它。使用gobject.child\u watch\u add请求获得终止通知。

谢谢!你的帖子解决了我的问题。因为我不理解gtk主循环。