I want to use the same tree widget for different reports. To make this work I need to modify the header every time before inserting new data. But I can't get the widget to behave the way I want it to: whenever I change the header/width, an empty column will come out of nowhere. Is there something I can do to prevent that or I must destroy and recreate a new treeview everytime?
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()