当应用程序从另一台计算机收到指定的消息时,我想让PyQT4窗口(QtGui.QMainWindow
)跳转到前面。
通常窗口最小化。
我尝试了raise_()
和show()
方法,但它不起作用。
答案 0 :(得分:14)
这有效:
# 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
提供焦点,但不会恢复最小化状态。
使用两者都有所期望的效果。
答案 1 :(得分:4)
我对上述方法没有任何好运,最终不得不直接使用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()
答案 2 :(得分:0)
这对我来说可以升起窗户,但始终不能放在顶部:
# bring window to top and act like a "normal" window!
window.setWindowFlags(window.windowFlags() | QtCore.Qt.WindowStaysOnTopHint) # set always on top flag, makes window disappear
window.show() # makes window reappear, but it's ALWAYS on top
window.setWindowFlags(window.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint) # clear always on top flag, makes window disappear
window.show() # makes window reappear, acts like normal window now (on top now but can be underneath if you raise another window)
答案 3 :(得分:0)
对于在Windows 10上具有NVidia GPU的我来说,这可行:
from PyQt4 import QtCore
# create window here...
window.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
我在以下答案中找到了答案:https://stackoverflow.com/a/12280956/4549682