我想打一个PyQt4的窗口( QtGui.QMainWindow
)跳到前面,当应用程序接收从另一台机器指定的消息。 通常情况下,窗口最小化。
我试过raise_()
和show()
方法,但它不工作。
我想打一个PyQt4的窗口( QtGui.QMainWindow
)跳到前面,当应用程序接收从另一台机器指定的消息。 通常情况下,窗口最小化。
我试过raise_()
和show()
方法,但它不工作。
这工作:
# 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
给人焦点,但不会恢复最小化状态。
同时使用了预期的效果。
我没有与上述方法运气好的话,最后不得不直接使用的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()