如何用Tkinter仅在桌面显示文本(不覆盖其他窗口)
解决方案
要让文本只显示在桌面(不覆盖其他窗口),你需要调整窗口的层级关系,把它绑定到桌面窗口上,而非让它一直置顶。以下是针对Windows系统的修改后代码:
import tkinter as tk import ctypes # 获取桌面窗口的句柄 user32 = ctypes.windll.user32 hwnd_desktop = user32.GetDesktopWindow() # 创建窗口 root = tk.Tk() label = tk.Label(root, text='Text on the screen', font=('Times','50'), fg='black', bg='white') # 去掉窗口边框 root.overrideredirect(True) # 设置窗口位置 root.geometry("+550+250") # 移除置顶属性(原代码的-topmost会让窗口覆盖所有内容) root.wm_attributes("-transparentcolor", "white") # 将我们的窗口设置为桌面窗口的子窗口,使其仅显示在桌面层 user32.SetParent(root.winfo_id(), hwnd_desktop) # 可选:让窗口位于桌面图标下方(需要图标在文本上方时保留) user32.SetWindowPos(root.winfo_id(), user32.GetWindowLongPtr(hwnd_desktop, -16) & 0xffff, 0, 0, 0, 0, 0x0001 | 0x0002) label.pack() root.mainloop()
关键修改说明:
- 删掉了
-topmost属性,避免窗口强制置顶。 - 通过
ctypes调用Windows系统API,把我们的窗口绑定为桌面窗口的子窗口,这样它就只会停留在桌面背景层,其他应用窗口打开后会自动覆盖它。 - 最后的
SetWindowPos调用可按需保留,作用是让文本显示在桌面图标下方。
注:该方案仅适用于Windows系统,若为macOS或Linux,需使用对应系统的窗口管理API实现类似效果。
内容的提问来源于stack exchange,提问作者Rithvik Ravikumar
相关产品推荐
相关产品推荐

