代码之家  ›  专栏  ›  技术社区  ›  mike rodent

如何从非gui线程的方法调用gui(应用程序)线程中的方法?

  •  0
  • mike rodent  · 技术社区  · 3 年前

    我有一个潜在的长期任务(序列化文档),我不想在Gui线程中运行。在该任务的最后,我想更新UI的各种视觉方面(菜单启用等)。

    我以为 QTimer.singleShot() 是要走的路,并且它运行的方法将始终在Gui线程中执行。但事实并非如此:如果你在非Gui线程中调用它,它调用的方法会在非Gui(同一个)线程中运行。

    我已经在操作系统(W10)上仔细检查过了。如果你发现你的情况并非如此,我很想听听。

    实际上,我已经创建了一个decorator来检查我的应用程序中的每个方法是否都在正确的线程(Gui或非Gui)中运行。参数所在的位置有一两个 None (=两者都可以),但这些都很少。更新UI元素的方法必须在Gui线程中调用。

    我当然可以通过创建一个新的信号并发射它来做到这一点。难道没有更简单的方法吗?

    0 回复  |  直到 3 年前
        1
  •  0
  •   mike rodent    3 年前

    答案似乎是否定的(见Musicamante的评论)。

    我不确定是否删除这个问题。我认为它为我澄清了一些事情。