我是PyQt的新手。我一直在寻找如何找到我的PyQt应用程序的窗口,该应用程序当前已打开并将其带到前面。我发现的这一切都是使用pywin32的例子(因此特定于Windows)。我想问一下,是否有一种与平台无关的方式可以实现目标。任何帮助将不胜感激。
这是我的代码。 activateWindow()函数应该将它带到前面。
class TestApp(QtGui.QApplication):
def __init__(self, argv, key):
QtGui.QApplication.__init__(self, argv)
self._activationWindow=None
self._memory = QtCore.QSharedMemory()
self._memory.setKey(key)
if self._memory.attach():
self._running = True
else:
self._running = False
if not self._memory.create(1):
raise RuntimeError(
self._memory.errorString().toLocal8Bit().data())
def isRunning(self):
return self._running
def activationWindow(self):
return self._activationWindow
def setActivationWindow(self, activationWindow):
self._activationWindow = activationWindow
def activateWindow(self):
if not self._activationWindow:
return
self._activationWindow.setWindowState( self._activationWindow.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive)
self._activationWindow.raise_()
self._activationWindow.show()
self._activationWindow.activateWindow()
答案 0 :(得分:1)
一个完整的,平台无关的解决方案可能无法实现。 Qt支持的每个平台都以不同的方式运行,而activateWindow
似乎有些错误。
首先,这里是Qt文档对activateWindow
所说的内容:
此功能执行与单击鼠标相同的操作 顶级窗口的标题栏。在X11上,结果取决于 窗口管理器。如果要确保窗口堆叠在上面 顶部也应该调用raise()。请注意,窗口必须是 可见,否则activateWindow()无效。
和
在Windows上,如果您在应用程序未调用时调用此方法 当前是活动的,然后它不会使它成为活动窗口。 它将改变任务栏条目的颜色以指示 窗口在某种程度上发生了变化。这是因为微软没有 允许应用程序中断用户当前正在做的事情 另一个申请。
如需更多确认困难的证据,请查看Qt论坛上的这些主题: