如何删除小部件 Tkinter Treeview 上留下的缩进?

问题描述 投票:0回答:3

我可以以某种方式删除这个缩进吗?我知道我可以删除第一列,但随后我无法插入图像。Treeview Image

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()
python tkinter treeview
3个回答
3
投票

假设您所指的缩进是第一列的左侧(所有图标的左侧),您可以根据需要调整整个小部件的填充。对于您的应用程序,请从以下内容开始:

self.tree = ttk.Treeview(master, padding=[-15,0,0,0])

2
投票

您以红色突出显示的是树视图指示器所在的区域 - openclose 切换图标 - 如果任何

Item
对象包含其自己的 subitems,则会显示该图标。

完成删除该区域的一种方法是完全删除指示器,同时使用允许您这样做的 ttk 主题。

s = ttk.Style()
s.theme_use('default')
s.configure('Treeview.Item', indicatorsize=0)

此方法似乎仅适用于 Windows 10 上的

default
clam
classic
主题。对于其他主题,Ron 的答案可能是您最好的选择。


0
投票

ttk 样式允许更改所有小部件的布局。如果您“简单地”从布局中删除指示器,缩进就会消失。

s = ttk.Style()
s.layout('my.Treeview.Item',
         [('Treeitem.padding', {'sticky': 'nswe', 'children': [
             # The next line is removed from the layout, removing the indicator
             # ('Treeitem.indicator', {'side': 'left', 'sticky': ''}),
             ('Treeitem.image', {'side': 'left', 'sticky': ''}),
             ('Treeitem.focus', {'side': 'left', 'sticky': '', 'children': [
                 ('Treeitem.text', {'side': 'left', 'sticky': ''})
                 ]})
             ]})
             ]
         )
# Use your customized style for the Treeview widget
self.tree = ttk.Treeview(master, style='my.Treeview')
© www.soinside.com 2019 - 2024. All rights reserved.