You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:40:15