我有一个潜在的长期任务(序列化文档),我不想在Gui线程中运行。在该任务的最后,我想更新UI的各种视觉方面(菜单启用等)。
我以为 QTimer.singleShot() 是要走的路,并且它运行的方法将始终在Gui线程中执行。但事实并非如此:如果你在非Gui线程中调用它,它调用的方法会在非Gui(同一个)线程中运行。
QTimer.singleShot()
我已经在操作系统(W10)上仔细检查过了。如果你发现你的情况并非如此,我很想听听。
实际上,我已经创建了一个decorator来检查我的应用程序中的每个方法是否都在正确的线程(Gui或非Gui)中运行。参数所在的位置有一两个 None (=两者都可以),但这些都很少。更新UI元素的方法必须在Gui线程中调用。
None
我当然可以通过创建一个新的信号并发射它来做到这一点。难道没有更简单的方法吗?
答案似乎是否定的(见Musicamante的评论)。
我不确定是否删除这个问题。我认为它为我澄清了一些事情。