问题描述
我需要将窗口保持在底部。
我尝试使用WindowStaysOnBottomHint
,但是当单击Win+D
或Show Desktop
时,应用程序会最小化。
我研究发现,当使用Win32 Api SetwindowPos
单击Show Desktop时,Rainmeter重新排列Z索引,但是我找不到python QT的解决方案。
请给我解决方法!
解决方法
一个简单的解决方法是检查hideEvent()
并确保事件为spontaneous(这意味着该事件源自应用程序外部,例如您的系统)。致电showNormal()
:
class MyWindow(QtWidgets.QWidget):
# ...
def hideEvent(self,event):
if event.spontaneous():
self.showNormal()
为了安全起见,您还可以检查changeEvent()
并过滤WindowStateChange
个事件:
def changeEvent(self,event):
if (event.type() == QtCore.QEvent.WindowStateChange and
event.spontaneous() and
self.windowState() == QtCore.Qt.WindowMinimized):
self.showNormal()
,
我找到了使用win32 API for python的解决方案(仅适用于Windows)。请参阅SetWindowPos,SetWindowLong,win32gui
if sys.platform=='win32':
from ctypes import windll
import win32gui,win32con
win32gui.SetWindowPos(window.winId(),win32con.HWND_BOTTOM,win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_NOACTIVATE )
hwnd=win32gui.GetWindow(win32gui.GetWindow(windll.user32.GetTopWindow(0),win32con.GW_HWNDLAST),win32con.GW_CHILD);
win32gui.SetWindowLong(window.winId(),win32con.GWL_HWNDPARENT,hwnd)
window
是QTWidget窗口