<p><strong>缩进</strong></p>
<p>正如jasonharper和Daniel Huckson在评论中所说,缩进可以用</p>
<pre><code>style.configure('Treeview', indent=100)
</code></pre>
<p><strong>指示器图像</strong></p>
<p>可以通过创建自定义主题元素并使用它替换<code>Treeview.Item</code>布局中的标准指示器来更改指示器图像</p>
<p>这里的关键是要知道打开的项(“user1”)和没有子项(“user2”)的项的状态名称,关闭是默认状态。因此,打开指示符需要与状态为<code>('user1', '!user2')</code>的项映射,而空映像需要与状态为<code>('user2', )</code>的项映射</p>
<p>我使用PIL为指示器创建虚拟图像,但可以直接加载自定义图像</p>
<pre><code>from PIL import Image, ImageTk, ImageDraw
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
style = ttk.Style(root)
# custom indicator images
im_open = Image.new('RGBA', (15, 15), '#00000000')
im_empty = Image.new('RGBA', (15, 15), '#00000000')
draw = ImageDraw.Draw(im_open)
draw.polygon([(0, 4), (14, 4), (7, 11)], fill='yellow', outline='black')
im_close= im_open.rotate(90)
img_open = ImageTk.PhotoImage(im_open, name='img_open', master=root)
img_close = ImageTk.PhotoImage(im_close, name='img_close', master=root)
img_empty = ImageTk.PhotoImage(im_empty, name='img_empty', master=root)
# custom indicator
style.element_create('Treeitem.myindicator',
'image', 'img_close', ('user1', '!user2', 'img_open'), ('user2', 'img_empty'),
sticky='w', width=15)
# replace Treeitem.indicator by custom one
style.layout('Treeview.Item',
[('Treeitem.padding',
{'sticky': 'nswe',
'children': [('Treeitem.myindicator', {'side': 'left', 'sticky': ''}),
('Treeitem.image', {'side': 'left', 'sticky': ''}),
('Treeitem.focus',
{'side': 'left',
'sticky': '',
'children': [('Treeitem.text', {'side': 'left', 'sticky': ''})]})]})]
)
tree = ttk.Treeview(root)
tree.pack()
tree.insert('', 'end', text='item 1', open=True)
tree.insert('', 'end', text='item 2')
tree.insert('I001', 'end', text='item 11', open=False)
tree.insert('I001', 'end', text='item 12', open=False)
tree.insert('I004', 'end', text='item 121', open=False)
root.mainloop()
</code></pre>
<p><a href="https://i.stack.imgur.com/0vzuv.png" rel="noreferrer"><img src="https://i.stack.imgur.com/0vzuv.png" alt="screenshot"/></a></p>