如何去除Tkinter Treeview组件的左侧缩进?
如何去除Tkinter Treeview的左侧缩进同时保留图片插入功能?
当然可以做到!你不需要删除默认的#0列就能去掉左侧缩进——关键是通过自定义ttk样式来调整Treeview的缩进参数,这样既能保留插入图片的能力,又能消除左侧的空白。
问题回顾
你遇到的困境是:删除Treeview的#0列会导致无法插入图片,但保留#0列又会有默认的左侧缩进。你的示例代码如下:
import tkinter as tk import tkinter.ttk as ttk from PIL import Image, ImageTk class App: def __init__(self, master): self.tree = ttk.Treeview(master) self.tree.heading('#0', text='Directory', anchor='w') self.tree["columns"]=("num_files") self.tree.heading('num_files', text='Number of files', anchor='w') self.image_tk = ImageTk.PhotoImage(Image.open('icon.png')) for i in range(10): self.tree.insert('', 'end', text="Dir %d" % (i+1), values=(15), open=False, image=self.image_tk) self.tree.pack(expand=1,fill="both") root = tk.Tk() app = App(root) root.mainloop()
解决方案
通过自定义ttk.Style,修改Treeview的indent属性为0即可实现需求。修改后的完整代码如下:
import tkinter as tk import tkinter.ttk as ttk from PIL import Image, ImageTk class App: def __init__(self, master): # 创建自定义样式,设置缩进为0 custom_style = ttk.Style(master) custom_style.configure('NoIndent.Treeview', indent=0) # 为Treeview应用这个自定义样式 self.tree = ttk.Treeview(master, style='NoIndent.Treeview') self.tree.heading('#0', text='Directory', anchor='w') self.tree["columns"]=("num_files") self.tree.heading('num_files', text='Number of files', anchor='w') self.image_tk = ImageTk.PhotoImage(Image.open('icon.png')) for i in range(10): self.tree.insert('', 'end', text="Dir %d" % (i+1), values=(15), open=False, image=self.image_tk) self.tree.pack(expand=1,fill="both") root = tk.Tk() app = App(root) root.mainloop()
关键说明
- 核心操作是
custom_style.configure('NoIndent.Treeview', indent=0):我们定义了一个名为NoIndent.Treeview的样式,将indent(缩进)参数设为0,直接消除了#0列左侧的默认空白。 - 保留#0列的前提下,你依然可以正常使用
image参数插入图片,完全不影响图片的展示效果。 - 如果你的Treeview后续需要添加层级子节点,这个设置会去掉所有层级的缩进;若仅需去掉根节点缩进,可进一步调整样式或通过其他逻辑处理,但针对你当前的无层级场景,这个方案完美适配。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

