如何使一个PyQt4的窗口跳到前面?(How to make a PyQT4 window jump

2019-06-27 08:20发布

我想打一个PyQt4的窗口( QtGui.QMainWindow )跳到前面,当应用程序接收从另一台机器指定的消息。 通常情况下,窗口最小化。

我试过raise_()show()方法,但它不工作。

Answer 1:

这工作:

# this will remove minimized status 
# and restore window with keeping maximized/normal state
window.setWindowState(window.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive)

# this will activate the window
window.activateWindow()

两者都需要对我Win7上。

setWindowState恢复最小化的窗口,并给出焦点。 但是,如果窗口刚刚失去焦点,而不是最小化的,它不会给焦点。

activateWindow给人焦点,但不会恢复最小化状态。

同时使用了预期的效果。



Answer 2:

我没有与上述方法运气好的话,最后不得不直接使用的Win32 API,使用C版本一个黑客在这里 。 这为我工作:

from win32gui import SetWindowPos
import win32con

SetWindowPos(window.winId(),
             win32con.HWND_TOPMOST, # = always on top. only reliable way to bring it to the front on windows
             0, 0, 0, 0,
             win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)
SetWindowPos(window.winId(),
             win32con.HWND_NOTOPMOST, # disable the always on top, but leave window at its top position
             0, 0, 0, 0,
             win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)
window.raise_()
window.show()
window.activateWindow()


文章来源: How to make a PyQT4 window jump to the front?
标签: python pyqt4