Search code examples
python-3.xtkintertkinter-entry

Python How to export data from entry widget to Treeview


I'm trying to do is to make a listbox using a Treeview widget. The listBox is successfully created BUt i don't understand how to export data from entry widget to listbox and i need to REMOVE button for listbox content. the program is working successfully.

from tkinter import ttk
import tkinter as tk


def update_sum(first_number_tk, second_number_tk, sum_tk) :
# Sets the sum of values of e1 and e2 as val of e3
   try:
    sum_tk.set((float(first_number_tk.get().replace(' ', '')) + float(second_number_tk.get().replace(' ', ''))))
   except :
    pass

   root.after(10, update_sum, first_number_tk, second_number_tk, sum_tk) # reschedule the event
   return

root = tk.Tk()
root.geometry('1000x600')

e1_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e1's val.
e2_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e2's val.
sum_tk = tk.StringVar(root) # Initializes a text variable of tk to use to set e3's val.

# Entries
e1 = tk.Entry(root, textvariable = e1_tk)
e1.grid(row=1,column=1)
e2 = tk.Entry(root, textvariable = e2_tk)
e2.grid(row=1,column=2)
e3 = tk.Entry(root, textvariable = sum_tk)
e3.grid(row=1,column=3)

e4=tk.Label(root,text="SL")
e4.grid(row=1,column=0)

e3_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e1's val.
e4_tk = tk.StringVar(root) # Initializes a text variable of tk to use to get e2's val.
sum2_tk = tk.StringVar(root) # Initializes a text variable of tk to use to set e3's val.


# Entries
e5 = tk.Entry(root, textvariable = e3_tk)
e5.grid(row=2,column=1)
e6 = tk.Entry(root, textvariable = e4_tk)
e6.grid(row=2,column=2)
e7 = tk.Entry(root, textvariable = sum2_tk)
e7.grid(row=2,column=3)

e8=tk.Label(root,text="DR")
e8.grid(row=2,column=0)

cols = ('name', 'No1', 'No2', 'total sum')
listBox = ttk.Treeview(root, columns=cols, show='headings')

for col in cols:
    listBox.heading(col, text=col)
    listBox.grid(row=1, column=0, columnspan=2)
    listBox.place(x=10, y=300)


# Will update the sum every second 10 ms = 0.01 second it takes ms as arg.
root.after(10, update_sum, e1_tk, e2_tk, sum_tk)
root.after(10, update_sum, e3_tk, e4_tk, sum2_tk)

root.mainloop()

Thanks in Advance..


Solution

  • You can just add two new button and two new function, like:

    b = tk.Button(root,text='Update Listbox',command=update)
    b.grid(row=3)
    
    b1 = tk.Button(root, text='Delete Items', command=delete)
    b1.grid(row=4)
    

    and then the update() could be something like:

    def update():
        listBox.insert('','end',value=('SOME NAME', float(e1.get()),float(e2.get()),float(e3.get())))
        listBox.insert('', 'end', value=('SOME NAME', float(e5.get()), float(e6.get()), float(e7.get())))
    

    and then delete() to be something like:

    def delete():
        selected_item = listBox.selection()[0]  # get selected item
        listBox.delete(selected_item)
    

    For the delete() to work properly, you have to click on the item you want to delete and then click on delete button

    The value argument is the only place where you will have to make the necessary changes.

    Hope it cleared your doubt, do let me know if any more errors or doubt.

    Cheers