【问题标题】:GTK+3 + Python: "Loading..." dialogGTK+3 + Python:“正在加载...”对话框
【发布时间】:2016-05-03 19:00:44
【问题描述】:

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

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() 因为那会阻塞我的应用程序的主循环。

有什么想法吗?

【问题讨论】:

标签: python gtk


【解决方案1】:

您对 GTK 的调用实际上所做的就是将主循环期间发生的操作排队。对话框有点特殊,当您调用 dialog.run() 来阻止允许某些更新时。您的 foo 函数指示 GTK 创建一个对话框,然后在它开始尝试执行工作之前将其销毁。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2017-04-03
    相关资源
    最近更新 更多