Calculadora em python usando tkinter

Ola e seja bem vindo ao hash tag online

Neste capitulo irei monstrar como fazer uma calculador avancada em python usando tkinter. Mas antes de aprofundar na parte pratica, quero dar alguns conceitos que ira ajudar - te a criar apps modernos e interactivos em python

Resultado final:

Preview

 

Tkinter e uma bibloteca python que serve para o desevolvimento de apps com interface grafica, onde o user ira interagir com UGI(butoes, labels , ...) em vez de uma linha de commandos(CLI).  Essa bibloteca e bastante poderosa e oferece varias ferramentas para o desevolvimento correcto dos seus sistemas.

Requisitos:

> Ter o python instalado no seu dispositivo

>Ter o VScode ou uma outra IDE instalada no seu dispositivo

Sendo o tkinter uma biblioteca built-in ou seja ja vem imbutida no proprio python.

Source Code: 

Ver no GitHub

 

from tkinter import *
from math import sqrt

def percent():
    first_number = entry.get()
    f_num.set(float(first_number))
    delete_entry()
    label_value.set(str(first_number) + " % of ")
    singal.set(1)

def type_number(number):
    first_number = entry.get()

    if ("." in first_number) and (number == "."):
        pass
    else:
        entry.delete(0, END)
        current_number = str(first_number) + str(number)
        entry.insert(END, current_number)
    operation.set("DIG")

def calc_perc():
    l_n = float(entry.get())
    f_n = f_num.get()

    result = (l_n * f_n) / 100
    delete_entry()
    entry.insert(0, result)
    last_label_value = label_value.get()
    label_value.set(last_label_value + str(l_n))

def iqual():
    if singal.get() == 1:
        calc_perc()
        singal.set(0)
    else:
        brute_terms = entry.get()

        try:
            terms = brute_terms.replace("x", "*")
            terms = brute_terms.replace("÷", "/")
        except:
            pass
        
        try:
            result = str(eval(terms))
            entry.delete(0, END)
            entry.insert(0, result)
            label_value.set(brute_terms)
            operation.set("IQU")
        except:
            label_value.set(brute_terms + " ERROR")
            operation.set("ERR")
            pass
    
def sqroot():
    term = float(entry.get())
    result = sqrt(term)
    delete_entry()
    entry.insert(0, result)
    label_value.set("√ of "+str(term))

def delete_entry():
    entry.delete(0, END)
    operation.set("DEL")

def clean():
    entry.delete(0, END)
    label_value.set("")
    operation.set("CLE")

root = Tk()
root.title("Calculadora")
root['bg'] = "cyan"

f_num = DoubleVar()
l_num = DoubleVar()
operation = StringVar()
label_value = StringVar()

singal = IntVar()
singal.set(0)
# declaring widgets

label = Label(root, textvariable = label_value, bg = "cyan", font = ("anonymous", 10))
entry = Entry(root, font = ('Arial', 16), bg = "cyan")

sqrbtn = Button(root, text= "√",relief = FLAT, bg = "lightgreen", command = sqroot)
blopenbtn = Button(root, text= "(",relief = FLAT, bg = "light coral", command = lambda: type_number("("))
blclosebtn = Button(root, text= ")",relief = FLAT, bg = "light coral", command = lambda: type_number(")"))
percetbtn = Button(root, text= "%",relief = FLAT, bg = "lightgray", command = percent)

delbtn = Button(root, text= "DEL", relief = FLAT, bg = "lightpink", command = delete_entry)
clrbtn = Button(root, text= "CLR", relief = FLAT, bg = "tomato", command = clean)

btn0 = Button(root, text= "0", relief = FLAT, bg = "lightblue", command = lambda: type_number(0))
btn1 = Button(root, text= "1", relief = FLAT, bg = "lightblue", command = lambda: type_number(1))
btn2 = Button(root, text= "2", relief = FLAT, bg = "lightblue", command = lambda: type_number(2))
btn3 = Button(root, text= "3", relief = FLAT, bg = "lightblue", command = lambda: type_number(3))
btn4 = Button(root, text= "4", relief = FLAT, bg = "lightblue", command = lambda: type_number(4))
btn5 = Button(root, text= "5", relief = FLAT, bg = "lightblue", command = lambda: type_number(5))
btn6 = Button(root, text= "6", relief = FLAT, bg = "lightblue", command = lambda: type_number(6))
btn7 = Button(root, text= "7", relief = FLAT, bg = "lightblue", command = lambda: type_number(7))
btn8 = Button(root, text= "8", relief = FLAT, bg = "lightblue", command = lambda: type_number(8))
btn9 = Button(root, text= "9", relief = FLAT, bg = "lightblue", command = lambda: type_number(9))
spotbtn = Button(root, text= ".", relief = FLAT, bg = "lightblue", command = lambda: type_number("."))

devbtn = Button(root, text= "÷", relief = FLAT, bg = "lightgray", command = lambda: type_number("÷"))
multbtn = Button(root, text= "x", relief = FLAT, bg = "lightgray", command = lambda: type_number("x"))
addbtn = Button(root, text= "+", relief = FLAT, bg = "lightgray", command = lambda: type_number("+"))
subbtn = Button(root, text= "-", relief = FLAT, bg = "lightgray", command = lambda: type_number("-"))
iqualbtn = Button(root, text= "=", relief = FLAT, bg = "lightgreen", command = iqual)

# give position for widgets

label.grid(row = 0, column = 0,columnspan = 4, sticky = W)
entry.grid(row = 1, column = 0, columnspan = 4, sticky = W+E, ipady = 30)

btn7.grid(row = 3, column = 0, sticky = W+E, ipadx = 20, ipady = 30)
btn8.grid(row = 3, column = 1, sticky = W+E, ipadx = 20, ipady = 30)
btn9.grid(row =3, column = 2, sticky = W+E, ipadx = 20, ipady = 30)
clrbtn.grid(row =3, column = 3, sticky = W+E+N, ipadx = 20, ipady = 8)
delbtn.grid(row =3, column = 3, sticky = W+E+S, ipadx = 20, ipady = 8)
devbtn.grid(row =4, column = 3, sticky = W+E+N, ipadx = 20, ipady = 8)

btn4.grid(row = 4, column = 0, sticky = W+E, ipadx = 20, ipady = 30)
btn5.grid(row = 4, column = 1, sticky = W+E, ipadx = 20, ipady = 30)
btn6.grid(row =4, column = 2, sticky = W+E, ipadx = 20, ipady = 30)
multbtn.grid(row =4, column = 3, sticky = W+E+S, ipadx = 20, ipady = 8)
subbtn.grid(row =5, column = 3, sticky = W+E+N, ipadx = 20, ipady = 8)

btn1.grid(row = 5, column = 0, sticky = W+E, ipadx = 20, ipady = 30)
btn2.grid(row = 5, column = 1, sticky = W+E, ipadx = 20, ipady = 30)
btn3.grid(row = 5, column = 2, sticky = W+E, ipadx = 20, ipady = 30)
addbtn.grid(row =5, column = 3, sticky = W+E+S, ipadx = 20, ipady = 8)

btn0.grid(row = 6, column = 1, sticky = W+E, ipadx = 20, ipady = 15)
spotbtn.grid(row = 6, column = 0, sticky = W+E, ipadx = 20, ipady = 15)
iqualbtn.grid(row =6, columnspan = 2, column = 2, sticky = W+E, ipadx = 20, ipady = 15)

sqrbtn.grid(row =2, column = 2, sticky = W+E, ipadx = 20, ipady = 8)
blopenbtn.grid(row =2, column = 0, sticky = W+E, ipadx = 20, ipady = 8)
blclosebtn.grid(row =2, column = 1, sticky = W+E, ipadx = 20, ipady = 8)
percetbtn.grid(row =2, column = 3, sticky = W+E, ipadx = 20, ipady = 8)

root.mainloop()

Calculadora feita em python, usando tkinter

👉 Copy Source Code

ALGUM PROBLEMA?

> deixe as suas duvidas e ou sugestoes nos comentarios.

Saiba mais sobre python e tkinter em outras postagens do blog!


Comentários