Python 如何使PyQT4窗口跳到前面?
当应用程序从另一台机器接收到指定消息时,我想使PyQT4窗口(Python 如何使PyQT4窗口跳到前面?,python,pyqt4,Python,Pyqt4,当应用程序从另一台机器接收到指定消息时,我想使PyQT4窗口(QtGui.QMainWindow)跳到前面。 通常窗口是最小化的 我尝试了raise() # this will remove minimized status # and restore window with keeping maximized/normal state window.setWindowState(window.windowState() & ~QtCore.Qt.WindowMinimized | Q
QtGui.QMainWindow
)跳到前面。
通常窗口是最小化的
我尝试了raise()
# 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上所必需的
setWindowsState
恢复最小化的窗口并提供焦点。但是,如果窗口只是失去了焦点而没有最小化,它将无法提供焦点
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()
这对我来说很管用,可以升起窗户,但不能一直把它放在上面:
# 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)
对于我来说,在Windows 10上使用NVidia GPU时,这一点很有效:
from PyQt4 import QtCore
# create window here...
window.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
我在这个答案上找到了答案:我尝试了本页上的所有其他建议。这是唯一一个在Windows10上对我有效的<代码>window.setWindowFlags(window.windowFlags()| QtCore.Qt.WindowStaysOnTopHint);window.show()
事实上,两者都不适用于我的Windows 10。可能是NVidia的一些奇怪问题。不适用于Windows 10。