2010-01-11

pygtk 异步显示对话框

需求是这样,我有一个主窗口,有自己的事情做,同时需要监视一个文件,如果有了变动就蹦个对话框出来,一开始的想法是

def handler():
dialog = gtk.MessageDialog(...)
dialog.run()
dialog.destroy()

gobject.threads_init()
gtk.gdk.threads_init()

gtk.io_add_watch(source, gobject.IO_IN, handler)
xxx_window.show()
gtk.main()

结果是对话框能显示出来,但是点击ok之后就卡死了,ok按钮也保持在“按下”的状态

后来看到了http://old.nabble.com/Deadlock-problem-when-calling-messagebox-function-with-idle_add-td25027865.html

于是在handler首尾分别加上gtk.gdk.threads_enter() 和 gtk.gdk.threads_leave() 就可以了

No comments: