如何让Tkinter应用始终处于Windows桌面图标后方且保持交互?
将Tkinter窗口置于桌面图标后方的解决方案
核心原理
Windows桌面图标实际位于SysListView32控件中,该控件是SHELLDLL_DefView的子窗口,而后者又是Progman(桌面容器窗口)的子窗口。要让Tkinter窗口处于图标后方,需要将窗口嵌入到这个层级中,放在SysListView32的下方。
修改后的代码实现
import tkinter as tk import ctypes from ctypes import wintypes # 加载Windows API函数 user32 = ctypes.WinDLL('user32', use_last_error=True) # 定义API函数的参数和返回值类型 HWND = wintypes.HWND LPCSTR = wintypes.LPCSTR user32.FindWindowA.restype = HWND user32.FindWindowA.argtypes = [LPCSTR, LPCSTR] user32.FindWindowExA.restype = HWND user32.FindWindowExA.argtypes = [HWND, HWND, LPCSTR, LPCSTR] user32.SetParent.restype = HWND user32.SetParent.argtypes = [HWND, HWND] user32.SetWindowPos.restype = wintypes.BOOL user32.SetWindowPos.argtypes = [HWND, HWND, wintypes.INT, wintypes.INT, wintypes.INT, wintypes.INT, wintypes.UINT] # 常量定义 HWND_BOTTOM = 1 SWP_NOSIZE = 0x0001 SWP_NOMOVE = 0x0002 root = tk.Tk() # 配置窗口样式:隐藏标题栏、全屏覆盖桌面 root.overrideredirect(True) root.geometry(f"{root.winfo_screenwidth()}x{root.winfo_screenheight()}+0+0") # 可选:设置透明色,让窗口对应颜色区域透出桌面背景 root.wm_attributes("-transparentcolor", "white") # 定位桌面图标所在的窗口层级 progman = user32.FindWindowA(b"Progman", b"Program Manager") shell_def_view = user32.FindWindowExA(progman, None, b"SHELLDLL_DefView", None) sys_list_view = user32.FindWindowExA(shell_def_view, None, b"SysListView32", b"FolderView") # 将Tkinter窗口嵌入桌面容器,并置于图标后方 if sys_list_view: user32.SetParent(root.winfo_id(), progman) # 把窗口放到Z顺序最底部 user32.SetWindowPos(root.winfo_id(), HWND_BOTTOM, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE) # 创建界面元素 canvas = tk.Canvas(root, bg="white") # 背景色与透明色一致 canvas.pack(fill="both", expand=True) label = tk.Label(canvas, text="这个窗口在桌面图标后方!", bg="white", font=("Arial", 20)) label.place(relx=0.5, rely=0.5, anchor="center") root.mainloop()
关键说明
- 层级调整逻辑:通过
FindWindow系列API定位到桌面图标的载体窗口,将Tkinter窗口的父级设为桌面容器Progman,再用SetWindowPos将窗口固定在Z顺序最底层,确保图标始终显示在上方。 - 窗口样式适配:
overrideredirect(True)移除窗口标题栏,geometry设置全屏,保证窗口完全覆盖桌面区域。 - 透明效果:通过
-transparentcolor可以让窗口指定颜色区域透明,避免遮挡原有桌面背景。
内容的提问来源于stack exchange,提问作者Bluescreen_404
相关产品推荐
相关产品推荐

