GTK + 3 + Python:"正在加载......"对话

时间:2016-05-03 19:00:44

标签: python gtk

我的主应用程序中有一个如下所示的函数:

def foo(stuff):
   dialog = Gtk.MessageDialog(...)
   dialog.show_all()

   a_line_that_takes_a_while(stuff)

   dialog.destroy()

   return result

我试图在a_line_that_takes_a_while之前添加一个对话框,然后在该行执行后立即将其销毁。

我试过了:

Document Db's rest end points

但令人惊讶的是,当a_line_that_takes_a_while已经执行时,对话框会显示出来。当然我不能使用dialog.run(),因为它会阻止我的应用程序的主循环。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

你对GTK的调用所做的一切就是排队在主循环期间发生的动作。对话框在某种特殊情况下,当您将dialog.run()调用到允许某些更新的块时。你的foo函数指示GTK创建一个对话框,然后在它开始尝试工作之前销毁它。

Threads应该做的工作。这里最大的问题是GTK不是线程安全的。因此,如果您决定使用本机python线程,请务必小心。此外,如果您正在执行磁盘操作,请考虑GFile的异步回调。他们可能会为你节省一些轮子重新发明。