我的主应用程序中有一个如下所示的函数:
def foo(stuff):
a_line_that_takes_a_while(stuff)
return result
我正在尝试添加一个对话框以在 a_line_that_takes_a_while 之前显示,并在该行执行后立即销毁它。
我已经尝试过:
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 已经执行时出现。当然,我不能使用dialog.run(),因为这会阻止我的应用程序的主循环。
有什么想法吗?
最佳答案
对 GTK 的调用实际上所做的就是对主循环期间发生的操作进行排队。对话框是一种特殊情况,当您调用dialog.run() 来阻止允许某些更新时。您的 foo 函数指示 GTK 创建一个对话框,然后在它开始尝试执行工作之前销毁它。
Threads应该做这项工作。这里最大的问题是 GTK 不是线程安全的。因此,如果您决定使用 native Python 线程,请务必小心。另外,如果您正在进行磁盘操作,请考虑 GFile的异步回调。它们可能会为您节省一些重新发明轮子的时间。
关于python - GTK+3+Python : "Loading..." dialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37012343/