I am trying to build a calculator with Tkinter and I set a variable "math" which helps the program to know which operation it needs to do (Addition, Subtraction, etc) but when I try to run it, it says "NameError: name 'math' is not defined" and I can't figure out what I'm doing wrong
Any help would be appreciated. I'm just a beginner. Here is the code in question:
from tkinter import *
root = Tk()
root.title("Simple Calculator")
e = Entry(root, width=35)
e.insert(0, "")
e.grid(row=0, column=0, columnspan=3, padx=10, pady=10)
def button_click(number):
current = e.get()
e.delete(0, END)
e.insert(0, str(current) + str(number))
def clear_button():
e.delete(0, END)
def button_add():
math = "addition"
first_number = e.get()
global f_num
f_num = int(first_number)
e.delete(0,END)
def button_equal():
second_number = e.get()
e.delete(0, END)
if (math == "addition"):
e.insert(0, f_num + int(second_number))
elif (math == "subtraction"):
e.insert(0, f_num - int(second_number))
elif (math == "multiplication"):
e.insert(0, f_num * int(second_number))
elif math == "division":
e.insert(0, f_num / int(second_number))
def button_subtraction():
first_number = e.get()
global f_num
math = "subtraction"
f_num = int(first_number)
e.delete(0,END)
def button_multiplication():
first_number = e.get()
global f_num
math = "multiplication"
f_num = int(first_number)
e.delete(0,END)
def button_division():
first_number = e.get()
global f_num
math = "division"
f_num = int(first_number)
e.delete(0,END)
# Creates the buttosn for the numbers
button_1 = Button(root, text="1", padx=40, pady=20, command=lambda: button_click(1))
button_2 = Button(root, text="2", padx=40, pady=20, command=lambda: button_click(2))
button_3 = Button(root, text="3", padx=40, pady=20, command=lambda: button_click(3))
button_4 = Button(root, text="4", padx=40, pady=20, command=lambda: button_click(4))
button_5 = Button(root, text="5", padx=40, pady=20, command=lambda: button_click(5))
button_6 = Button(root, text="6", padx=40, pady=20, command=lambda: button_click(6))
button_7 = Button(root, text="7", padx=40, pady=20, command=lambda: button_click(7))
button_8 = Button(root, text="8", padx=40, pady=20, command=lambda: button_click(8))
button_9 = Button(root, text="9", padx=40, pady=20, command=lambda: button_click(9))
button_0 = Button(root, text="0", padx=40, pady=20, command=lambda: button_click(0))
# Position for the numbers
button_1.grid(row=1, column=0)
button_2.grid(row=1, column=1)
button_3.grid(row=1, column=2)
button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)
button_7.grid(row=3, column=0)
button_8.grid(row=3, column=1)
button_9.grid(row=3, column=2)
button_0.grid(row=4, column=0)
# Creates the clear button and assigns its position
button_clear = Button(root, text="Clear", padx=77, pady = 20, command=clear_button)
button_clear.grid(row=4, column=1, columnspan=2)
# Creates the + button and assigns its position
button_plus= Button(root, text="+", padx=39, pady=20, command=button_add)
button_plus.grid(row=5, column=0)
# Creates the - button and assigns its position
button_plus= Button(root, text="-", padx=41, pady=20, command=button_subtraction)
button_plus.grid(row=6, column=0)
# Creates the * button and assigns its position
button_plus= Button(root, text="*", padx=39, pady=20, command=button_multiplication)
button_plus.grid(row=6, column=1)
# Creates the / button adn assigns its position
button_plus= Button(root, text="/", padx=39, pady=20, command=button_division)
button_plus.grid(row=6, column=2)
# Creates the = Button and assigns its position
button_equal = Button(root, text="=", padx=87, pady = 20, command=button_equal)
button_equal.grid(row=5, column=1, columnspan=2)
root.mainloop()
As @John Coleman said, math variables are not accessible for other functions.
You can add global math
for each function except the button equal.
So, your full code will be like this;
from tkinter import *
root = Tk()
root.title("Simple Calculator")
e = Entry(root, width=35)
e.insert(0, "")
e.grid(row=0, column=0, columnspan=3, padx=10, pady=10)
def button_click(number):
current = e.get()
e.delete(0, END)
e.insert(0, str(current) + str(number))
a = int(str(current) + str(number))
def clear_button():
e.delete(0, END)
def button_add():
global math,f_num
math = "addition"
first_number = e.get()
f_num = int(first_number)
e.delete(0,END)
def button_equal():
second_number = e.get()
e.delete(0, END)
if (math == "addition"):
e.insert(0, f_num + int(second_number))
elif (math == "subtraction"):
e.insert(0, f_num - int(second_number))
elif (math == "multiplication"):
e.insert(0, f_num * int(second_number))
elif math == "division":
e.insert(0, f_num / int(second_number))
def button_subtraction():
global math,f_num
first_number = e.get()
math = "subtraction"
f_num = int(first_number)
e.delete(0,END)
def button_multiplication():
global math,f_num
first_number = e.get()
math = "multiplication"
f_num = int(first_number)
e.delete(0,END)
def button_division():
global math,f_num
first_number = e.get()
math = "division"
f_num = int(first_number)
e.delete(0,END)
# Creates the buttosn for the numbers
button_1 = Button(root, text="1", padx=40, pady=20, command=lambda: button_click(1))
button_2 = Button(root, text="2", padx=40, pady=20, command=lambda: button_click(2))
button_3 = Button(root, text="3", padx=40, pady=20, command=lambda: button_click(3))
button_4 = Button(root, text="4", padx=40, pady=20, command=lambda: button_click(4))
button_5 = Button(root, text="5", padx=40, pady=20, command=lambda: button_click(5))
button_6 = Button(root, text="6", padx=40, pady=20, command=lambda: button_click(6))
button_7 = Button(root, text="7", padx=40, pady=20, command=lambda: button_click(7))
button_8 = Button(root, text="8", padx=40, pady=20, command=lambda: button_click(8))
button_9 = Button(root, text="9", padx=40, pady=20, command=lambda: button_click(9))
button_0 = Button(root, text="0", padx=40, pady=20, command=lambda: button_click(0))
# Position for the numbers
button_1.grid(row=1, column=0)
button_2.grid(row=1, column=1)
button_3.grid(row=1, column=2)
button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)
button_7.grid(row=3, column=0)
button_8.grid(row=3, column=1)
button_9.grid(row=3, column=2)
button_0.grid(row=4, column=0)
# Creates the clear button and assigns its position
button_clear = Button(root, text="Clear", padx=77, pady = 20, command=clear_button)
button_clear.grid(row=4, column=1, columnspan=2)
# Creates the + button and assigns its position
button_plus= Button(root, text="+", padx=39, pady=20, command=button_add)
button_plus.grid(row=5, column=0)
# Creates the - button and assigns its position
button_plus= Button(root, text="-", padx=41, pady=20, command=button_subtraction)
button_plus.grid(row=6, column=0)
# Creates the * button and assigns its position
button_plus= Button(root, text="*", padx=39, pady=20, command=button_multiplication)
button_plus.grid(row=6, column=1)
# Creates the / button adn assigns its position
button_plus= Button(root, text="/", padx=39, pady=20, command=button_division)
button_plus.grid(row=6, column=2)
# Creates the = Button and assigns its position
button_equal = Button(root, text="=", padx=87, pady = 20, command=button_equal)
button_equal.grid(row=5, column=1, columnspan=2)
root.mainloop()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.