在调试器中,我可以看到我的QMenu对象与主gui线程不在同一个线程中。例如,QApplication.instance().thread() == 0xdeadbeef
,但mymenu.thread() == 0xdeadbabe
1)这是预期的吗?顺便说一句,我的QMenus 不是原生菜单(我使用setNativeMenuBar(False)
)
2)我想阻止,直到菜单处理完所有事件。我尝试了QApplication.processEvents()
,但这有点棘手,因为必须从相同的线程调用我想要等待的小部件(在我的例子中,菜单) 。我将自定义事件过滤器类与moveToThread()
结合使用,以确保从运行QMenu的同一个线程调用processEvents()
,但它似乎并不重要。
无论我尝试什么,我似乎无法阻止所有QMenu事件/动作信号处理的完成。我唯一的选择似乎是sleep()
足够长,我知道处理已经完成。但这对我的用例来说并不是真的可以接受。