Я хочу использовать один и тот же виджет дерева для разных отчетов.Чтобы это работало, мне нужно каждый раз изменять заголовок, прежде чем вставлять новые данные.Но я не могу заставить виджет вести себя так, как я хочу: всякий раз, когда я изменяю заголовок / ширину, пустой столбец появляется из ниоткуда.Есть ли что-то, что я могу сделать, чтобы предотвратить это, или я должен каждый раз уничтожать и воссоздавать новое дерево?
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tree = ttk.Treeview(root, selectmode='browse')
tree.grid(row=0,column=0)
tree_header = ("One", "Two", "Three", "Four", "Five")
tree_width = (100, 100, 100, 100, 100)
tree["columns"] = tree_header
tree['show'] = 'headings'
for i in range(len(tree_header)):
tree.column(tree_header[i],width=tree_width[i], anchor="w", stretch = False)
tree.heading(tree_header[i], text=tree_header[i], anchor='w')
tree.insert("",tk.END,text="",value=(1,2,3,4,5))
def click_me():
tree.delete(*tree.get_children())
new_header = ("Six","Seven","Eight","Nine","Ten")
new_width = (120, 80, 120, 80, 100)
tree["columns"] = new_header
tree['show'] = 'headings'
for i in range(len(new_header)):
tree.column(new_header[i],width=new_width[i],anchor="w", stretch = False)
tree.heading(new_header[i],text=new_header[i],anchor="w")
a_button.config(command=click_me_again)
tree.insert("", tk.END, text="", value=(6, 7, 8, 9, 10))
def click_me_again():
tree.delete(*tree.get_children())
tree["columns"] = tree_header
tree['show'] = 'headings'
for i in range(len(tree_header)):
tree.column(tree_header[i],width=tree_width[i], anchor="w", stretch = False)
tree.heading(tree_header[i], text=tree_header[i], anchor='w')
a_button.config(command=click_me)
tree.insert("", tk.END, text="", value=(1, 2, 3, 4, 5))
a_button = tk.Button(root,text="Click me",command=click_me)
a_button.grid(row=1,column=0)
root.mainloop()