python - GTK+3+Python : "Loading..." dialog

标签 python gtk

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

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/

相关文章:

python - 使用python编写 double 二进制文件

python - 使用 Scapy 编写脚本

rust - 如何在 Rust 中设置 GTK 事件内结构的值?

python - 如何从月 Gtk.Calendar 创建周日历并在 python 中显示每天的注释

python - 当线程完成时通知主线程

python - 在源代码中查找引用的文本字符串

python - 如何在 postgresql 中存储超过 1600 列

label - Vala - 如何以编程方式设置 Gtk4.Label 的颜色?

python - 我如何从 PyGTK 运行 linux 命令?

python - 在 GTK+ 中键入文本时如何禁用加速器