Search code examples
pythontkinter-entry

python another Label and Entry widgets Creating with calculation


The code is presented below Creates one label and three entry widgets, i want to create another one label and three entry widgets with same calculation. i am trying to add label and entry widgets but not working and coming to syntax errors.

try :
    import tkinter as tk # Python 3
except :
    import Tkinter as tk # Python 2

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

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

root = tk.Tk()
root.geometry('850x450')

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)


# Will update the sum every second 10 ms = 0.01 second it takes ms as arg.
root.after(10, update_sum)
root.mainloop()

enter image description here

i want to create another label like "SL" and entry widgets with calculation event


Solution

  • You can pass arguments to function and call it with different variables:

    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('850x450')
    
    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="ML")
    e8.grid(row=2,column=0)
    
    
    # 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()