In this video we’ll start to build out a Calculator using Object Oriented Tkinter and Python.
I’ve created calculators in the past using functional calculator, but in this video we’ll use OOP.
We’ll take what we’ve learned in the last few videos with class based code.
Python Code: class_calc.py
(Github Code)
from tkinter import *
class App(Tk):
def __init__(self):
super().__init__()
# Title, icon, size
self.title("Tkinter.com - OOP Calculator")
self.iconbitmap('images/codemy.ico')
self.geometry('500x850')
# Create Widgets
self.my_entry = Entry(self, width=25, font=("Helvetica", 24))
self.my_entry.pack(pady=20)
# Create a new frame to hold the button
My_frame(self)
# Clear the entry box
def clear(self):
self.my_entry.delete(0, END)
# Flip numbers positive or negative
def pos_neg(self):
if self.my_entry.get():
# Get whatever is in the entry box
number = int(self.my_entry.get())
# Delete Entry Box
self.my_entry.delete(0, END)
# Flip the number sign -/+
self.my_entry.insert(0, (-1) * number)
# Button Frame Class
class My_frame(Frame):
def __init__(self, parent):
super().__init__(parent)
# Pack the frame
self.pack()
# Define the buttons
self.button_1 = Button(self, text="1", font=("Helvetica", 24))
self.button_2 = Button(self, text="2", font=("Helvetica", 24))
self.button_3 = Button(self, text="3", font=("Helvetica", 24))
self.button_4 = Button(self, text="4", font=("Helvetica", 24))
self.button_5 = Button(self, text="5", font=("Helvetica", 24))
self.button_6 = Button(self, text="6", font=("Helvetica", 24))
self.button_7 = Button(self, text="7", font=("Helvetica", 24))
self.button_8 = Button(self, text="8", font=("Helvetica", 24))
self.button_9 = Button(self, text="9", font=("Helvetica", 24))
self.button_0 = Button(self, text="0", font=("Helvetica", 24))
self.button_negative = Button(self, text="+/-", font=("Helvetica", 24), command=parent.pos_neg)
self.button_equal = Button(self, text="=", font=("Helvetica", 24))
self.button_plus = Button(self, text="+", font=("Helvetica", 24))
self.button_minus = Button(self, text="-", font=("Helvetica", 24))
self.button_multiply = Button(self, text="*", font=("Helvetica", 24))
self.button_divide = Button(self, text="/", font=("Helvetica", 24))
self.button_clear = Button(self, text="Clear", font=("Helvetica", 24), command=parent.clear)
# Grid the buttons to the screen
self.button_1.grid(row=0, column=0, ipadx=40, ipady=20, padx=(0, 10))
self.button_2.grid(row=0, column=1, ipadx=40, ipady=20)
self.button_3.grid(row=0, column=2, ipadx=40, ipady=20, padx=(10, 0))
self.button_4.grid(row=1, column=0, ipadx=40, ipady=20, padx=(0, 10), pady=10)
self.button_5.grid(row=1, column=1, ipadx=40, ipady=20, pady=10)
self.button_6.grid(row=1, column=2, ipadx=40, ipady=20, padx=(10, 0), pady=10)
self.button_7.grid(row=2, column=0, ipadx=40, ipady=20, padx=(0, 10), pady=10)
self.button_8.grid(row=2, column=1, ipadx=40, ipady=20, pady=10)
self.button_9.grid(row=2, column=2, ipadx=40, ipady=20, padx=(10, 0), pady=10)
self.button_0.grid(row=3, column=0, ipadx=40, ipady=20, padx=(0, 10), pady=10)
self.button_negative.grid(row=3, column=1, ipadx=31, ipady=20, pady=10)
self.button_equal.grid(row=3, column=2, ipadx=40, ipady=20, padx=(10, 0), pady=10)
self.button_plus.grid(row=4, column=0, ipadx=40, ipady=20, padx=(0, 10), pady=10)
self.button_minus.grid(row=4, column=1, ipadx=40, ipady=20, pady=10)
self.button_multiply.grid(row=4, column=2, ipadx=40, ipady=20, padx=(10, 0), pady=10)
self.button_divide.grid(row=5, column=0, ipadx=42, ipady=20, padx=(0, 10), pady=10)
self.button_clear.grid(row=5, column=1, columnspan=2, ipadx=84, ipady=20, padx=(10, 0), pady=10)
# Define and instantiate our app
app = App()
app.mainloop()

Add comment