Search code examples
pythonpython-3.xtkintertreeview

How to make table out of lists using TreeView Tkinter Python


What I want.. is to how create a table using TreeView Tkinter and data which is to be inserted in the table should from lists.

For example:

This is the list i have

ID = [1,2,3,4,5]
Names = ['Tom', 'Rob', 'Tim', 'Jim', 'Kim']

And I want to create a table with headings "ID" and "Names" and I don't want to put each values in the table separately. Well this is a small list but even when I want to create a bigger table. So can anyone tell me how can I insert these list data in table automatically(loop).


Solution

  • Just use for loop something like this:

    from tkinter import ttk 
    import tkinter as tk 
    
    ID = [1,2,3,4,5, 6, 7, 8, 9]
    Names = ['Tom', 'Rob', 'Tim', 'Jim', 'Kim', 'Kim', 'Kim', 'Kim']
      
    window = tk.Tk() 
    
    treev = ttk.Treeview(window, selectmode ='browse') 
    treev.pack(side='left',expand=True, fill='both') 
      
    
    verscrlbar = ttk.Scrollbar(window,  
                               orient ="vertical",  
                               command = treev.yview) 
      
    verscrlbar.pack(side ='right', fill ='y')   
    treev.configure(yscrollcommand = verscrlbar.set) 
    
      
    treev["columns"] = ('1', '2') 
    
    treev['show'] = 'headings'
      
    treev.column("1", width = 90, anchor ='c') 
    treev.column("2", width = 90, anchor ='c') 
    
    
    treev.heading("1", text ="ID") 
    treev.heading("2", text ="Names") 
      
    for x, y in zip(ID, Names):
        treev.insert("", 'end', values =(x, y)) 
    
    window.mainloop() 
    

    If You want a better way of doing it then use a dictionary:

    
    from tkinter import ttk 
    import tkinter as tk 
    
    titles={'Id': [1,2,3,4,5, 6, 7, 8, 9], 'Names':['Tom', 'Rob', 'Tim', 'Jim', 'Kim', 'Kim', 'Kim', 'Kim', 'Kim'], 'Column': [1,2,3,4,5, 6, 7, 8, 9]}
    
      
    window = tk.Tk() 
    
    treev = ttk.Treeview(window, selectmode ='browse') 
    treev.pack(side='left',expand=True, fill='both') 
      
    
    verscrlbar = ttk.Scrollbar(window,  
                               orient ="vertical",  
                               command = treev.yview) 
      
    verscrlbar.pack(side ='right', fill ='y')   
    treev.configure(yscrollcommand = verscrlbar.set) 
    
    treev["columns"] = list(x for x in range(len(list(titles.keys()))))
    treev['show'] = 'headings'
    
      
    for x, y in enumerate(titles.keys()):
        treev.column(x, minwidth=20, stretch=True,  anchor='c')
        treev.heading(x, text=y)
    
    for args in zip(*list(titles.values())):
        treev.insert("", 'end', values =args) 
    
    window.mainloop()