#python #tkinter #treeview #icons #indentation
Вопрос:
Я создаю список элементов с подпунктами, используя python 3 tkinter treeview. В моем древовидном представлении есть три столбца. Очень просто, я хочу показать этот маленький значок /- на каждом элементе, у которого есть дочерние элементы. По какой-то причине он не появляется. Кроме того, дочерние элементы отображаются непосредственно под родительскими элементами. Таким образом, без значка «плюс» и без отступа невозможно определить, какие элементы находятся под каким родителем. Это просто выглядит как список. Я не могу найти в документах, где указано «включить значок плюс» или «установить отступ дочерних элементов».
К чему я стремлюсь:
Что у меня есть (это по-прежнему позволяет мне скрывать/показывать «предметы» под каждой «трубкой», дважды щелкнув строку «Трубка»):
Любая помощь была бы очень признательна.
Вот несколько примеров кода:
import tkinter as tk
import tkinter.ttk as ttk
import random
sub = tk.Toplevel()
result_frame = tk.Frame(sub)
result_frame.pack()
treeview_widget_frame = tk.Frame(result_frame)
treeview_widget_frame.pack(side = 'top')
columns = ['a','b','c']
tubes = 10
treeview_widget = ttk.Treeview(treeview_widget_frame, height = 20, columns = columns, show = 'headings')
for col in columns:
treeview_widget.heading(col, text = col.title(), command = lambda c=col: sortby(treeview_widget, c, 0))
for n in range(int(tubes)):
treeview_widget.insert('', tk.END, text = 'Tube ' str(n 1), iid = n, values = ('Tube ' str(n 1), "",""), open = 'True')
print(n)
for t in range(15):
r = random.randint(0,9)
treeview_widget.insert(r, tk.END, values = ['Item ' str(t), '12345', 'details'])
treeview_widget.pack()
sub.mainloop()
Комментарии:
1. То есть вы имеете в виду, что текст должен динамично меняться всякий раз, когда вы нажимаете на плюс или минус?
2. Джут добавил еще немного информации, чтобы помочь прояснить ситуацию.
3. Вы даете возможность
show = 'headings'
при создании просмотра дерева, поэтому вы говорите tkinter скрыть часть дерева (по умолчаниюshow = 'tree headings'
отображаются как заголовки столбцов, так и дерево).4. Спасибо @j_4321. Это работает. Можете ли вы указать на документы, которые объясняют детали?
Ответ №1:
Как объясняется в документации tcl/tk, Treeview
виджет имеет show
возможность выбирать, какие части виджета отображать. Для этого требуется строка среди:
"tree headings"
(по умолчанию)"tree"
"headings"
""
headings
соответствует заголовкам столбцов и tree
соответствует 0-му столбцу #0
, который содержит значки для развертывания/сворачивания элементов.
Так как вы создаете Treeview
с
treeview_widget = ttk.Treeview(..., show='headings')
затем вы говорите tkinter скрыть часть дерева, поэтому вы не можете видеть значки . Чтобы восстановить их, создайте дерево либо с show='tree headings'
параметром, либо без него, так как это значение по умолчанию.