I have provided some code that uses callbacks to allow an Entry box to take a value from a button. The question is, how can I callback two concatenated values into the entry box. If the user clicks 1 and then 7, the value of 17 is shown.
from tkinter import *
win = Tk()
win.geometry("210x125")
def set_text(text):
e.insert(0,text)
return
e = Entry(win,width=35)
e.grid(columnspan=4)
seven_button = Button(win,width=6,text="7",command=lambda:set_text("7")).grid(row=1, column=0)
eight_button = Button(win,width=6,text="8",command=lambda:set_text("8")).grid(row=1, column=1)
nine_button = Button(win,width=6,text="9",command=lambda:set_text("9")).grid(row=1, column=2)
div_button = Button(win,width=6,text="÷",command=lambda:set_text("÷")).grid(row=1, column=3)
four_button = Button(win,width=6,text="4",command=lambda:set_text("4")).grid(row=2, column=0)
five_button = Button(win,width=6,text="5",command=lambda:set_text("5")).grid(row=2, column=1)
six_button = Button(win,width=6,text="6",command=lambda:set_text("6")).grid(row=2, column=2)
multiply_button = Button(win,width=6,text="x",command=lambda:set_text("x")).grid(row=2, column=3)
one_button = Button(win,width=6,text="1",command=lambda:set_text("1")).grid(row=3, column=0)
two_button = Button(win,width=6,text="2",command=lambda:set_text("2")).grid(row=3, column=1)
three_button = Button(win,width=6,text="3",command=lambda:set_text("3")).grid(row=3, column=2)
minus_button = Button(win,width=6,text="-",command=lambda:set_text("-")).grid(row=3, column=3)
zero_button = Button(win,width=14,text="0",command=lambda:set_text("0")).grid(columnspan=2)
point_button = Button(win,width=6,text=".",command=lambda:set_text(".")).grid(row=4, column=2)
plus_button = Button(win,width=6,text="+",command=lambda:set_text("+")).grid(row=4, column=3)
win.mainloop()
if you want full functionality, might i suggest adding an equals button that will compute everything in the entry widget?
import Tkinter as tk
win = tk.Tk()
win.geometry("300x300")
def compute(entry):
string_to_compute = tk.StringVar()
string_to_compute = entry.get()
entry.delete(0, tk.END)
if '+' in string_to_compute:
l = string_to_compute.split('+')[0]
r = string_to_compute.split('+')[1]
entry.insert(0, float(l) + float(r))
elif '-' in string_to_compute:
l = string_to_compute.split('-')[0]
r = string_to_compute.split('-')[1]
entry.insert(0, float(l) - float(r))
elif 'x' in string_to_compute:
l = string_to_compute.split('x')[0]
r = string_to_compute.split('x')[1]
entry.insert(0, float(l) * float(r))
elif '/' in string_to_compute:
l = string_to_compute.split('/')[0]
r = string_to_compute.split('/')[1]
entry.insert(0, float(l) / float(r))
def set_text(text):
e.insert(tk.END, text)
return
e = tk.Entry(win, width=35)
e.grid(columnspan=4)
seven_button = tk.Button(win, width=6, text="7", command=lambda: set_text("7")).grid(row=1, column=0)
eight_button = tk.Button(win, width=6, text="8", command=lambda: set_text("8")).grid(row=1, column=1)
nine_button = tk.Button(win, width=6, text="9", command=lambda: set_text("9")).grid(row=1, column=2)
div_button = tk.Button(win, width=6, text="/", command=lambda: set_text("/")).grid(row=1, column=3)
four_button = tk.Button(win, width=6, text="4", command=lambda: set_text("4")).grid(row=2, column=0)
five_button = tk.Button(win, width=6, text="5", command=lambda: set_text("5")).grid(row=2, column=1)
six_button = tk.Button(win, width=6, text="6", command=lambda: set_text("6")).grid(row=2, column=2)
multiply_button = tk.Button(win, width=6, text="x", command=lambda: set_text("x")).grid(row=2, column=3)
one_button = tk.Button(win, width=6, text="1", command=lambda: set_text("1")).grid(row=3, column=0)
two_button = tk.Button(win, width=6, text="2", command=lambda: set_text("2")).grid(row=3, column=1)
three_button = tk.Button(win, width=6, text="3", command=lambda: set_text("3")).grid(row=3, column=2)
minus_button = tk.Button(win, width=6, text="-", command=lambda: set_text("-")).grid(row=3, column=3)
zero_button = tk.Button(win, width=14, text="0", command=lambda: set_text("0")).grid(columnspan=2)
point_button = tk.Button(win, width=6, text=".", command=lambda: set_text(".")).grid(row=4, column=2)
plus_button = tk.Button(win, width=6, text="+", command=lambda: set_text("+")).grid(row=4, column=3)
equal_button = tk.Button(win, width=6, text="=", command=lambda: compute(e)).grid(row=5, column=1)
win.mainloop()
Note i changed the division sign and some of the logic of the entry so it would enter the left to right.