from tkinter import *
from tkinter import messagebox
from tkinter import ttk
root = Tk()
root.title("Calculator")
#The calculator logic
def calc(key):
global memory
if key == "=":
#Exclude writing letters
str1 = "-+123456789.*"
if calc_entry.get()[0] not in str1:
calc_entry.insert(END, "The first character is not a number")
messagebox.showerror("Error", "You entered a wrong number")
#Account
try:
result = eval(calc_entry.get())
calc_entry.insert(END, "=" + str(result))
except:
calc_entry.insert(END, "Error")
messagebox.showerror("Error", "Check that the data is correct")
#Clear the field
elif key == "C":
calc_entry.delete(0, END)
#Change +-
elif key == "-/+":
if "=" in calc_entry.get():
calc_entry.delete(0, END)
try:
if calc_entry.get() [0] == "-":
calc_entry.delete(0)
else:
calc_entry.insert(0, "-")
except IndexError:
pass
else:
if "=" in calc_entry.get():
calc_entry.delete(0, END)
calc_entry.insert(END, key)
#Create all the buttons
bttn_list = [
"7", "8", "9", "+", "-",
"4", "5", "6", "*", "/",
"1", "2", "3", "-/+", "=",
"0", ".", "C"
]
r = 1
c = 0
for i in bttn_list:
rel = ""
cmd=lambda x=i: calc(x)
ttk.
Button(root, text
=i, command
=cmd
).
grid(row
=r, column
=c
) c += 1
if c>4:
c=0
r += 1
calc_entry = Entry(root, width=33)
calc_entry.grid(row=0, column=0, columnspan=5)
root.mainloop()
ZnJvbSB0a2ludGVyIGltcG9ydCAqCmZyb20gdGtpbnRlciBpbXBvcnQgbWVzc2FnZWJveApmcm9tIHRraW50ZXIgaW1wb3J0IHR0awoKcm9vdCA9IFRrKCkKcm9vdC50aXRsZSgiQ2FsY3VsYXRvciIpCgojVGhlIGNhbGN1bGF0b3IgbG9naWMKZGVmIGNhbGMoa2V5KToKICAgIGdsb2JhbCBtZW1vcnkKICAgIGlmIGtleSA9PSAiPSI6CiNFeGNsdWRlIHdyaXRpbmcgbGV0dGVycwogICAgICAgIHN0cjEgPSAiLSsxMjM0NTY3ODkuKiIKICAgICAgICBpZiBjYWxjX2VudHJ5LmdldCgpWzBdIG5vdCBpbiBzdHIxOgogICAgICAgICAgICBjYWxjX2VudHJ5Lmluc2VydChFTkQsICJUaGUgZmlyc3QgY2hhcmFjdGVyIGlzIG5vdCBhIG51bWJlciIpCiAgICAgICAgICAgIG1lc3NhZ2Vib3guc2hvd2Vycm9yKCJFcnJvciIsICJZb3UgZW50ZXJlZCBhIHdyb25nIG51bWJlciIpCiNBY2NvdW50CiAgICAgICAgdHJ5OgogICAgICAgICAgICByZXN1bHQgPSBldmFsKGNhbGNfZW50cnkuZ2V0KCkpCiAgICAgICAgICAgIGNhbGNfZW50cnkuaW5zZXJ0KEVORCwgIj0iICsgc3RyKHJlc3VsdCkpCiAgICAgICAgZXhjZXB0OgogICAgICAgICAgICBjYWxjX2VudHJ5Lmluc2VydChFTkQsICJFcnJvciIpCiAgICAgICAgICAgIG1lc3NhZ2Vib3guc2hvd2Vycm9yKCJFcnJvciIsICJDaGVjayB0aGF0IHRoZSBkYXRhIGlzIGNvcnJlY3QiKQojQ2xlYXIgdGhlIGZpZWxkCiAgICBlbGlmIGtleSA9PSAiQyI6CiAgICAgICAgY2FsY19lbnRyeS5kZWxldGUoMCwgRU5EKQojQ2hhbmdlICstCiAgICBlbGlmIGtleSA9PSAiLS8rIjoKICAgICAgICBpZiAiPSIgaW4gY2FsY19lbnRyeS5nZXQoKToKICAgICAgICAgICAgY2FsY19lbnRyeS5kZWxldGUoMCwgRU5EKQogICAgICAgIHRyeToKICAgICAgICAgICAgaWYgY2FsY19lbnRyeS5nZXQoKSBbMF0gPT0gIi0iOgogICAgICAgICAgICAgICAgY2FsY19lbnRyeS5kZWxldGUoMCkKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIGNhbGNfZW50cnkuaW5zZXJ0KDAsICItIikKICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgcGFzcwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGlmICI9IiBpbiBjYWxjX2VudHJ5LmdldCgpOgogICAgICAgICAgICAgICAgY2FsY19lbnRyeS5kZWxldGUoMCwgRU5EKQogICAgICAgICAgICBjYWxjX2VudHJ5Lmluc2VydChFTkQsIGtleSkKCgojQ3JlYXRlIGFsbCB0aGUgYnV0dG9ucwpidHRuX2xpc3QgPSBbCiAgICAiNyIsICI4IiwgIjkiLCAiKyIsICItIiwKICAgICI0IiwgIjUiLCAiNiIsICIqIiwgIi8iLAogICAgIjEiLCAiMiIsICIzIiwgIi0vKyIsICI9IiwKICAgICIwIiwgIi4iLCAiQyIKXQpyID0gMQpjID0gMAoKZm9yIGkgaW4gYnR0bl9saXN0OgogICAgcmVsID0gIiIKICAgIGNtZD1sYW1iZGEgeD1pOiBjYWxjKHgpCiAgICB0dGsuQnV0dG9uKHJvb3QsIHRleHQ9aSwgY29tbWFuZD1jbWQpLmdyaWQocm93PXIsIGNvbHVtbj1jKQogICAgYyArPSAxCiAgICBpZiBjPjQ6CiAgICAgICAgYz0wCiAgICAgICAgciArPSAxCgpjYWxjX2VudHJ5ID0gRW50cnkocm9vdCwgd2lkdGg9MzMpCmNhbGNfZW50cnkuZ3JpZChyb3c9MCwgY29sdW1uPTAsIGNvbHVtbnNwYW49NSkKCnJvb3QubWFpbmxvb3AoKQo=