My GUI Calculator Made With Tkinter.
I am a newbie on programming world and I am trying to learn Python as it is the easiest and very strong programming language. I've learnt all basic theories and the programming syntax and then I have solved some problems from urionlinejudge. Now I'am trying to learn GUI Appliations and I am trying to learn Tkinter module of Python.
Previously I posted a Wikipedia search tool GUI application that I made with python and tkinter module of python. I made another GUI which is a Calculator. Let's jump to the codes.
Importing, naming and sizing
import tkinter as tk
win = tk.Tk()
win.title('Calculator')
win.geometry('380x550+200+100')
win.resizable(0,0)
Functions
def enter_number(x):
last_char = entry_box.get()[-1]
if entry_box.get() == '0' or entry_box.get() == 'Syntax error':
entry_box.delete(0,'end')
entry_box.insert(0,str(x))
elif last_char in ['+', '-','*','/'] and x == '0':
pass
else:
length = len(entry_box.get())
entry_box.insert(length,str(x))
def func_dot(x):
content = entry_box.get()
length = len(content)
if entry_box.get() == '0':
if x == '.':
entry_box.insert(1,'.')
else:
entry_box.insert(length,'.')
def enter_operators(x):
if entry_box.get() != '0':
length = len(entry_box.get())
content = entry_box.get()
last_char = content[-1]
if last_char in ['+','-','/'] or content[-2:] == '**':
pass
else:
entry_box.insert(length, operators_list[x]['text'])
def fun_clr():
entry_box.delete(0,'end')
entry_box.insert(0,'0')
result = 0
history = []
def func_equal():
content = entry_box.get()
try:
result=eval(content)
entry_box.delete(0,'end')
entry_box.insert(0,str(result))
history.append(content)
history.reverse()
status.configure(text='History: '+ ' | '.join(history[0:7]), font='verdana 7 bold')
except:
entry_box.delete(0,'end')
entry_box.insert(0,'Syntax error')
def func_del():
if entry_box.get() == 'Syntax error':
entry_box.delete(0, 'end')
entry_box.insert(0, '0')
if entry_box.get() !='0':
length = len(entry_box.get())
entry_box.delete(length-1, 'end')
if length == 1:
entry_box.insert(0,'0')
Entry Box
entry_box = tk.Entry(font='verdana 14 bold', width=22, bd=6, justify=tk.RIGHT)
entry_box.insert(0,'0')
entry_box.pack(padx=10, pady=10)
btn_list = []
for i in range(10):
btn_list.append(tk.Button(text=str(i), bd=6,font='verdana 14 bold', width=4, command = lambda x=i:enter_number(x)))
btn_numbers=1
for i in range(3):
for j in range(3):
btn_list[btn_numbers].place(x=30+j*90, y=70+i*70)
btn_numbers+=1
operators button
operators_list = []
for i in range(4):
operators_list.append(tk.Button(width=4, font='verdana 14 bold', bd=5, command = lambda x=i: enter_operators(x)))
operators_list[0]['text'] = '+'
operators_list[1]['text'] = '-'
operators_list[2]['text'] = '*'
operators_list[3]['text'] = '/'
for i in range(4):
operators_list[i].place(x=290, y=70+i*70)
Other buttons
# *************** zero btn *************
zero_btn = tk.Button(text='0',width=11, font='verdana 14 bold', bd=5, command = lambda x='0': enter_number(x))
zero_btn.place(x=30, y=280)
# ************ clr btn **********
clr_btn = tk.Button(text='C',width=11, font='verdana 14 bold', bd=5, command = fun_clr)
clr_btn.place(x=30, y=350)
# *************** dot btn **************
btn_dot = tk.Button(text='.',width=4, font='verdana 14 bold', bd=5, command = lambda x='.': func_dot(x))
btn_dot.place(x=210, y=280)
# *************** del btn **************
btn_del = tk.Button(text='Del',width=10, font='verdana 14 bold', bd=5, command = func_del)
btn_del.place(x=210, y=350)
# ************************** equal btn ****************
btn_equal = tk.Button(text='=',width=24, font='verdana 14 bold', bd=5, command = func_equal)
btn_equal.place(x=30, y=420)
status bar
# ****************** status bar *************
status = tk.Label(win, text='History ', font='verdana 7 bold')
status.place(x=30,y=490)
copyright message
# *************** copyright message *************
message = tk.Label(text='©All rights reserved',font='verdana 7')
message.pack(side=tk.BOTTOM, fill=tk.Y)
win.mainloop()
So the full code is :-
import tkinter as tk
win = tk.Tk()
win.title('Calculator')
win.geometry('380x550+200+100')
win.resizable(0,0)
def enter_number(x):
last_char = entry_box.get()[-1]
if entry_box.get() == '0' or entry_box.get() == 'Syntax error':
entry_box.delete(0,'end')
entry_box.insert(0,str(x))
elif last_char in ['+', '-','*','/'] and x == '0':
pass
else:
length = len(entry_box.get())
entry_box.insert(length,str(x))
def func_dot(x):
content = entry_box.get()
length = len(content)
if entry_box.get() == '0':
if x == '.':
entry_box.insert(1,'.')
else:
entry_box.insert(length,'.')
def enter_operators(x):
if entry_box.get() != '0':
length = len(entry_box.get())
content = entry_box.get()
last_char = content[-1]
if last_char in ['+','-','/'] or content[-2:] == '**':
pass
else:
entry_box.insert(length, operators_list[x]['text'])
def fun_clr():
entry_box.delete(0,'end')
entry_box.insert(0,'0')
result = 0
history = []
def func_equal():
content = entry_box.get()
try:
result=eval(content)
entry_box.delete(0,'end')
entry_box.insert(0,str(result))
history.append(content)
history.reverse()
status.configure(text='History: '+ ' | '.join(history[0:7]), font='verdana 7 bold')
except:
entry_box.delete(0,'end')
entry_box.insert(0,'Syntax error')
def func_del():
if entry_box.get() == 'Syntax error':
entry_box.delete(0, 'end')
entry_box.insert(0, '0')
if entry_box.get() !='0':
length = len(entry_box.get())
entry_box.delete(length-1, 'end')
if length == 1:
entry_box.insert(0,'0')
entry_box = tk.Entry(font='verdana 14 bold', width=22, bd=6, justify=tk.RIGHT)
entry_box.insert(0,'0')
entry_box.pack(padx=10, pady=10)
btn_list = []
for i in range(10):
btn_list.append(tk.Button(text=str(i), bd=6,font='verdana 14 bold', width=4, command = lambda x=i:enter_number(x)))
btn_numbers=1
for i in range(3):
for j in range(3):
btn_list[btn_numbers].place(x=30+j*90, y=70+i*70)
btn_numbers+=1
operators_list = []
for i in range(4):
operators_list.append(tk.Button(width=4, font='verdana 14 bold', bd=5, command = lambda x=i: enter_operators(x)))
operators_list[0]['text'] = '+'
operators_list[1]['text'] = '-'
operators_list[2]['text'] = '*'
operators_list[3]['text'] = '/'
for i in range(4):
operators_list[i].place(x=290, y=70+i*70)
zero_btn = tk.Button(text='0',width=11, font='verdana 14 bold', bd=5, command = lambda x='0': enter_number(x))
zero_btn.place(x=30, y=280)
clr_btn = tk.Button(text='C',width=11, font='verdana 14 bold', bd=5, command = fun_clr)
clr_btn.place(x=30, y=350)
btn_dot = tk.Button(text='.',width=4, font='verdana 14 bold', bd=5, command = lambda x='.': func_dot(x))
btn_dot.place(x=210, y=280)
btn_del = tk.Button(text='Del',width=10, font='verdana 14 bold', bd=5, command = func_del)
btn_del.place(x=210, y=350)
btn_equal = tk.Button(text='=',width=24, font='verdana 14 bold', bd=5, command = func_equal)
btn_equal.place(x=30, y=420)
status = tk.Label(win, text='History ', font='verdana 7 bold')
status.place(x=30,y=490)
message = tk.Label(text='©All rights reserved',font='verdana 7')
message.pack(side=tk.BOTTOM, fill=tk.Y)
win.mainloop()
Output
Thank You
Leave My GUI Calculator Made With Tkinter. to:
Read more #programming posts
Best Posts From here-to-share
We have not curated any of here-to-share's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.
More Posts From here-to-share
- Digital Drawing of the XANDER FOXWOOD. Drawing Using Autodesk.
- Agency Website Frontpage Design. Part III.
- My First Drawing. Fan-Art of TARSA From Splinterlands Cards.
- Agency Website Frontpage Design. Part II.
- Agency Website Frontpage Design. Part I.
- Random Jokes Using AJAX.
- Phonebook GUI Application Made With Python and Tkinter (Part V).
- Phonebook GUI Application Made With Python and Tkinter (Part IV).
- Phonebook GUI Application Made With Python and Tkinter (Part III).
- Phonebook GUI Application Made With Python and Tkinter (Part II).