我想让PyQT4窗口(QtGui.QMainWindow
)在应用程序从另一台机器收到指定消息时跳转到前面。 通常窗口被最小化。如何让PyQT4窗口跳到前面?
我试过raise_()
和show()
方法,但它不起作用。
我想让PyQT4窗口(QtGui.QMainWindow
)在应用程序从另一台机器收到指定消息时跳转到前面。 通常窗口被最小化。如何让PyQT4窗口跳到前面?
我试过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版本here的黑客。这对我有效:
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()
非常感谢。它确实有效。 – redice
如果我从终端运行我的窗口,这不适用于我! –
在Ubuntu Unity下工作正常! –