当非活动应用程序(窗口)时,如何以编程方式引发Qt窗口/小部件?

问题描述 投票:0回答:1

我有一个应用程序,它具有多个带有GUI组件的进程,它们需要像一个进程一样进行协调(我们称它为GUI系统,并说它使用TCP套接字来协调这些组件)。

为此,如果系统中的一个窗口被激活,则会向系统中的所有其他窗口发送一条消息,以确保将它们提升到不属于我们GUI系统的任何窗口之上。

似乎我在纯本地Qt中最能做的就是调用QWidget.activateWindow()。如果该进程不是活动的Windows进程,则其他各种命令(例如show,raise)似乎都不起作用。

让所有其他窗口调用激活窗口的问题是,它将焦点转移到我刚刚单击的窗口之外,从而使该窗口不可用(除非我在所有其他进程都完成了他们的激活命令后以某种方式调用了它的激活) -但这会带来很多复杂性和脆弱性。

python windows qt pyqt qwidget
1个回答
1
投票
[试图解决我的问题时,我发现很多人都遇到类似的问题。

在未处于活动状态的进程时,似乎没有Qt Native方式可以打开窗口。

[许多指向使用win32 API的地方,但是很难找到如何混合PyQt和win32 API的所有部分,以便在非活动应用程序时仅将窗口移到最前面,所以这是我的最佳尝试:

import win32gui import win32con hwnd = self.widget.winId() win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE) win32gui.SetWindowPos(hwnd, win32con.HWND_NOTOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE)

我讨厌要打两次电话,但好像可以用。
© www.soinside.com 2019 - 2024. All rights reserved.