I'm having some troubles with treeview when I try to display hierarchical data. The desirable output would be the following:
But my code is producing the following treeview:
Please find below the relevant part of my code:
import tkinter
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from ttkbootstrap import Style
root = Tk()
style = Style("superhero", master=root)
root.wm_iconbitmap(get_ico())
root.title('Alegység kezelyő')
root.geometry('700x650')
def machineQuery():
for i in query_tree.get_children():
query_tree.delete(i)
root.update()
conn = connectMe()
cur = conn.cursor()
cur.execute("SELECT gepszam_id, azonosito, megnevezes FROM gep")
records = cur.fetchall()
print_records_id = ''
print_records = ''
for record in records:
print_records_id = record[0]
print_records = '"' + str(record[2]) + '" "' + str(record[1]) + '"'
query_tree.insert(parent='', index='end', iid=print_records_id, values=print_records,open=False)
conn.close()
def mainQuery():
conn = connectMe()
cur = conn.cursor()
cur.execute("SELECT gep_egyseg.gepszam_id, gep_egyseg.gepegyseg_id, gep_egyseg.egyseg_megnevezes FROM gep_egyseg JOIN gep ON gep_egyseg.gepszam_id = gep.gepszam_id")
records = cur.fetchall()
print(records)
print_records_id = ''
print_records = ''
for record in records:
print_records_id = record[1]
for_iid=str(record[0]) + "." + str(print_records_id)
print_records = '"' + str(record[2]) + '" "' + ' ' + '"'
query_tree.insert(parent='', index='end', iid=for_iid, values=print_records,open=False)
query_tree.move(for_iid, record[0], END)
conn.close()
def query():
machineQuery()
mainQuery()
query_scrollbar = ttk.Scrollbar(root, orient = VERTICAL)
query_tree = ttk.Treeview(root, yscrollcommand = query_scrollbar.set)
query_scrollbar.configure(command = query_tree.yview)
query_scrollbar.grid(row = 3, column = 2, sticky = NS)
query_tree['columns'] = ("Name", "Machine_id")
query_tree.column("#0", anchor = W, width = 20, stretch=NO)
query_tree.column("Machine_id", anchor = W, width = 100, minwidth = 50)
query_tree.column("Name", anchor=W, width = 150, minwidth = 75)
query_tree.heading("0", text = " ")
query_tree.heading("Machine_id", text = "Gép azonosító")
query_tree.heading("Name", text = "Név")
query_tree.grid(row =3, column = 0, columnspan=2, sticky= NSEW)
query()
root.mainloop()
I know that it's just an aesthetic issue but it really bothers me.
Thank you for your help.
Edit: A Version with some sample datas:
import tkinter
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from ttkbootstrap import Style
root = Tk()
style = Style("superhero", master=root)
#root.wm_iconbitmap(get_ico())
root.title('Alegység kezelyő')
root.geometry('700x650')
def machineQuery():
for i in query_tree.get_children():
query_tree.delete(i)
root.update()
records = [(1, 'Some_uniqe_data1', "Machine1"), (15, 'Some_uniqe_data2', 'Machine2')]
print_records_id = ''
print_records = ''
for record in records:
print_records_id = record[0]
print_records = '"' + str(record[2]) + '" "' + str(record[1]) + '"'
query_tree.insert(parent='', index='end', iid=print_records_id, values=print_records,open=False)
def mainQuery():
records = [(1, 1, 'Sub_component1'), (15, 2, 'Sub_component2'), (15, 3, 'Sub_component3')]
print(records)
print_records_id = ''
print_records = ''
for record in records:
print_records_id = record[1]
for_iid=str(record[0]) + "." + str(print_records_id)
print_records = '"' + str(record[2]) + '" "' + ' ' + '"'
query_tree.insert(parent='', index='end', iid=for_iid, values=print_records,open=False)
query_tree.move(for_iid, record[0], END)
def query():
machineQuery()
mainQuery()
query_scrollbar = ttk.Scrollbar(root, orient = VERTICAL)
query_tree = ttk.Treeview(root, yscrollcommand = query_scrollbar.set)
query_scrollbar.configure(command = query_tree.yview)
query_scrollbar.grid(row = 3, column = 2, sticky = NS)
query_tree['columns'] = ("Name", "Machine_id")
query_tree.column("#0", anchor = W, width = 20, stretch=NO)
query_tree.column("Machine_id", anchor = W, width = 100, minwidth = 50)
query_tree.column("Name", anchor=W, width = 150, minwidth = 75)
query_tree.heading("0", text = " ")
query_tree.heading("Machine_id", text = "Some_Unique_Datas")
query_tree.heading("Name", text = "Name")
query_tree.grid(row =3, column = 0, columnspan=2, sticky= NSEW)
query()
root.mainloop()
Based on the provided data, I make the following changes:
#0
as the Name
columnrecord[0]
as the value of parent
option inside mainQuery()
Below are the required changes:
...
def machineQuery():
for i in query_tree.get_children():
query_tree.delete(i)
# fields: machine_id, unique_data, machine_name
records = [(1, 'Some_uniqe_data1', "Machine1"), (15, 'Some_uniqe_data2', 'Machine2')]
for record in records:
query_tree.insert(parent='', index=END, iid=record[0], text=record[2], values=record[1])
def mainQuery():
# fields: machine_id, component_id, component_name
records = [(1, 1, 'Sub_component1'), (15, 2, 'Sub_component2'), (15, 3, 'Sub_component3')]
for record in records:
query_tree.insert(parent=record[0], index=END, iid=f"{record[0]}.{record[1]}", text=record[2])
...
query_tree['columns'] = ['#1']
query_tree.column("#0", anchor=W, width=200, stretch=NO)
query_tree.column("#1", anchor=W, width=100, minwidth=50)
query_tree.heading("#0", text="Name", anchor=W)
query_tree.heading("#1", text="Some Unique Data", anchor=W)
...
root.columnconfigure(0, weight=1)
root.rowconfigure(3, weight=1)
root.mainloop()
And the result: