Tkinter(Linux X11):如何让splash类型无标题栏窗口显示在任务栏?
X11环境下Tkinter splash窗口显示任务栏解决方案
问题根因
你通过root.attributes("-type", "splash")移除标题栏的操作,在X11窗口系统下会将窗口标记为启动闪屏类型,Ubuntu默认窗口管理器会自动跳过对这类窗口的任务栏展示。
推荐解决方案
建议替换原有的无边框实现方式,既保留无边框效果,又能正常显示任务栏,无需额外依赖的代码如下:
from tkinter import Tk root = Tk() # 替换原来的 -type splash 配置,用overrideredirect实现无边框 root.overrideredirect(True) # 显式声明窗口为普通应用类型,通知窗口管理器需要展示在任务栏 root.attributes("-type", "normal") # 可选:设置应用类名,方便窗口管理器识别应用 root.classname = "你的应用名称" # 此处添加你的业务逻辑代码 root.mainloop()
异常兼容
如果上述代码在你的环境中不生效,可以安装python3-xlib依赖后,手动修改X11窗口属性强制展示:
# 安装依赖命令 sudo apt install python3-xlib
修改后的代码:
from tkinter import Tk from Xlib import X, display from Xlib.Xatom import ATOM root = Tk() root.overrideredirect(True) root.attributes("-type", "normal") # 手动移除跳过任务栏的属性标记 d = display.Display() window = d.create_resource_object('window', root.winfo_id()) wm_state_atom = d.intern_atom('_NET_WM_STATE') skip_taskbar_atom = d.intern_atom('_NET_WM_STATE_SKIP_TASKBAR') window.change_property(wm_state_atom, ATOM, 32, [0, skip_taskbar_atom], X.PropModeReplace) d.sync() root.mainloop()
注意事项
- 该方案仅适配X11窗口系统环境,Windows系统下的解决方法可查阅相关技术文档。
- 部分自定义桌面环境可能需要额外配置窗口规则,可参考对应桌面的官方文档调整。
内容的提问来源于stack exchange,提问作者TheLizzard
相关产品推荐
相关产品推荐

