Python tkinter如何隐藏GUI程序在任务栏显示的图标
state方法用于调整窗口最小化/最大化/正常状态,无法实现隐藏任务栏图标的需求,需要通过修改窗口系统层级的属性实现,以下是对应平台的可行方案:
Windows平台实现(适配Python 3.8.5环境)
通过ctypes调用Windows原生user32 API调整窗口扩展样式,即可实现需求,修改后的完整代码如下:
from tkinter import Tk import ctypes from ctypes import wintypes # Windows API 所需常量定义 GWL_EXSTYLE = -20 WS_EX_TOOLWINDOW = 0x00000080 WS_EX_APPWINDOW = 0x00040000 def dragwin(event): x = root.winfo_pointerx() - _offsetx y = root.winfo_pointery() - _offsety root.geometry(f"+{x}+{y}") def clickwin(event): global _offsetx, _offsety _offsetx = event.x _offsety = event.y root = Tk() root.overrideredirect(1) root.attributes("-topmost", True) root.configure(background="black") root.attributes('-alpha', 0.7) # 隐藏任务栏图标核心逻辑 hwnd = ctypes.windll.user32.GetParent(root.winfo_id()) style = ctypes.windll.user32.GetWindowLongPtrW(hwnd, GWL_EXSTYLE) # 去除窗口在任务栏显示的属性,添加工具窗口属性 style = style & ~WS_EX_APPWINDOW | WS_EX_TOOLWINDOW ctypes.windll.user32.SetWindowLongPtrW(hwnd, GWL_EXSTYLE, style) # 刷新窗口使样式生效 root.withdraw() root.deiconify() # 窗口拖拽绑定逻辑保留 root.bind('<Button-1>', clickwin) root.bind('<B1-Motion>', dragwin) root.mainloop()
代码说明
- 通过
GetParent获取tkinter窗口的真实系统句柄,避免直接使用winfo_id()返回的句柄不生效的问题 - 原有置顶、透明度、拖拽功能均不受影响
- 该方案仅适配Windows系统,其他平台可参考下方适配逻辑
其他平台适配
- macOS:可设置
root.attributes('-type', 'dock'),也可调用AppKit框架接口修改窗口展示规则 - Linux:可通过修改窗口的
_NET_WM_STATE_SKIP_TASKBAR属性实现隐藏效果
内容的提问来源于stack exchange,提问作者adityanithariya
相关产品推荐
相关产品推荐

