Tkinter – Printnig return function in a label

Question:

i don’t really undestand, why the "results" label is not updating when i click on the button.

If someone can help me to understand!

Thank You

from tkinter import *
from tkinter import ttk

def add_function(): 
  results.config(n1.get() + n2.get())


root = Tk()
root.geometry("500x100") # Size of the window
root.title("Add Calculator") # Title of the window


main_frame = ttk.Frame(root, padding="3 3 12 12")
main_frame.grid(column=0, row=0, sticky=(N,S,E,W))
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)


n1 = DoubleVar()
n1_entry = Entry(main_frame, width= 10, textvariable= n1)
n1_entry.grid(column=2, row=1, sticky=(N))

symbol_add = Label(main_frame, text="+")
symbol_add.grid(column=3, row=1, sticky=(N))

n2 = DoubleVar()
n2_entry = Entry(main_frame, width= 10, textvariable= n2)
n2_entry.grid(column=4, row=1, sticky=(N))

symbol_equal = Button(main_frame, width=10, text="=", command= add_function )
symbol_equal.grid(column=5, row=1, sticky=(N))

results = Label(main_frame, text=add_function(), background="#C0C0C0")
results.grid(column=6, row=1, sticky=(N))

root.mainloop()

I’ve tryed different variant, but it’s either i have an error, or the label is printing a random number even before i modify the entry.

Asked By: HaggisBonbon

||

Answers:

It is because you don’t update the label. Returning something from a button command is pointless because the caller isn’t your code. It’s called from mainloop and mainloop doesn’t know what to do with the return code.

To update the label you must call the configure method:

results.configure(text=n1.get() + n2.get())
Answered By: Bryan Oakley
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.