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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:18:00