如何从非gui线程中的方法调用gui(应用程序)线程中的方法?
How to call method in gui (application) thread from method in non-gui thread?
我有一个可能很长的 运行ning 任务(序列化文档),我不想 运行 在 Gui 线程中。在该任务结束时,我想更新 UI(菜单启用等)的各个视觉方面。
我曾假设 QTimer.singleShot()
是可行的方法,并且 运行s 的方法将始终在 Gui 线程中执行。但事实并非如此:如果你在非Gui线程中调用它,它调用的方法运行s在非Gui线程中(同一个)。
我已经在我的 OS (W10) 上仔细检查过了。如果您发现您的情况并非如此,我很想听听。
我实际上创建了一个装饰器来检查我的应用程序中的每个方法 运行 是否在正确的线程(Gui 或非 Gui)中。参数为None
(=可以是其中之一)的有一两个,但这些很少。必须在 Gui 线程中调用更新 UI 元素的方法。
我当然可以通过创建一个新信号并发射它来做到这一点。没有更简单的方法吗?
答案似乎是否定的(请参阅 Musicamante 的评论)。
我不确定是否删除这个问题。我认为它为我澄清了一些事情。
我有一个可能很长的 运行ning 任务(序列化文档),我不想 运行 在 Gui 线程中。在该任务结束时,我想更新 UI(菜单启用等)的各个视觉方面。
我曾假设 QTimer.singleShot()
是可行的方法,并且 运行s 的方法将始终在 Gui 线程中执行。但事实并非如此:如果你在非Gui线程中调用它,它调用的方法运行s在非Gui线程中(同一个)。
我已经在我的 OS (W10) 上仔细检查过了。如果您发现您的情况并非如此,我很想听听。
我实际上创建了一个装饰器来检查我的应用程序中的每个方法 运行 是否在正确的线程(Gui 或非 Gui)中。参数为None
(=可以是其中之一)的有一两个,但这些很少。必须在 Gui 线程中调用更新 UI 元素的方法。
我当然可以通过创建一个新信号并发射它来做到这一点。没有更简单的方法吗?
答案似乎是否定的(请参阅 Musicamante 的评论)。
我不确定是否删除这个问题。我认为它为我澄清了一些事情。