我想讓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下工作正常! –