from tkinter import *
from tkinter import ttk
root = Tk()
class appconverter():
def __init__(self):
self.root = root
self.janela()
self.frames_da_janela()
self.widgets_frame1()
self.Menus()
root.mainloop()
def janela(self):
self.root.title("COMPARADOR AVANÇADO DE PROMOÇÕES")
self.root.configure(background='#1e3743')
self.root.geometry("600x550")
self.root.resizable(0,0)
def frames_da_janela(self):
self.frame_1 = Frame(self.root, bd=4,
bg='#dfe3ee',
highlightbackground='#759fe6',
highlightthickness=2)
self.frame_1.place(relx=0.02, rely=0.02,
relwidth=0.96, relheight=0.96)
def widgets_frame1(self):
self.abas = ttk.Notebook(self.frame_1)
self.Desconto_simples = Frame(self.abas, bg="#dfe3ee")
self.leve2_pague1 = Frame(self.abas, bg="#dfe3ee")
self.Desconto_progressivo = Frame(self.abas, bg="#dfe3ee")
self.abas.add(self.Desconto_simples, text="Desconto simples")
self.abas.add(self.leve2_pague1, text="Leve 2 Pague 1")
self.abas.add(self.Desconto_progressivo, text="Desconto progressivo")
self.abas.place(relx=0, rely=0, relwidth=0.98, relheight=0.98)
# ==========================
# 🔵 DESCONTO SIMPLES
# ==========================
self.preco_base1 = StringVar()
self.iva1 = StringVar()
self.desconto1 = StringVar()
self.resultado1 = StringVar()
Label(self.Desconto_simples, text="Preço base produto",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.05)
Entry(self.Desconto_simples, textvariable=self.preco_base1,
justify='center', font=("Arial",15,"bold")
).place(relx=0.45, rely=0.05, relwidth=0.45)
Label(self.Desconto_simples, text="IVA (%)",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.15)
self.iva_combo1 = ttk.Combobox(self.Desconto_simples,
textvariable=self.iva1,
values=[0, 6, 13, 23],
state="readonly",
justify='center',
font=("Arial",15,"bold"))
self.iva_combo1.place(relx=0.45, rely=0.15, relwidth=0.45)
self.iva_combo1.current(3) # IVA 23% padrão
Label(self.Desconto_simples, text="Desconto (%)",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.25)
Entry(self.Desconto_simples, textvariable=self.desconto1,
justify='center', font=("Arial",15,"bold")
).place(relx=0.45, rely=0.25, relwidth=0.45)
Button(self.Desconto_simples, text="Calcular",
bg='#107db2', fg='white',
font=('verdana',12,'bold'),
command=self.calcular_desconto_simples
).place(relx=0.3, rely=0.4, relwidth=0.4)
Label(self.Desconto_simples, textvariable=self.resultado1,
bg='#dfe3ee', font=("Arial",13,"bold")
).place(relx=0.05, rely=0.55, relwidth=0.9)
# ==========================
# 🟢 LEVE 2 PAGUE 1
# ==========================
self.preco_l2 = StringVar()
self.iva_l2 = StringVar()
self.resultado_l2 = StringVar()
Label(self.leve2_pague1, text="Preço base produto",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.05)
Entry(self.leve2_pague1, textvariable=self.preco_l2,
justify='center', font=("Arial",15,"bold")
).place(relx=0.45, rely=0.05, relwidth=0.45)
Label(self.leve2_pague1, text="IVA (%)",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.15)
self.iva_combo2 = ttk.Combobox(self.leve2_pague1,
textvariable=self.iva_l2,
values=[0,6,13,23],
state="readonly",
justify='center',
font=("Arial",15,"bold"))
self.iva_combo2.place(relx=0.45, rely=0.15, relwidth=0.45)
self.iva_combo2.current(3)
Button(self.leve2_pague1, text="Calcular",
bg='#107db2', fg='white',
font=('verdana',12,'bold'),
command=self.calcular_leve2
).place(relx=0.3, rely=0.3, relwidth=0.4)
Label(self.leve2_pague1, textvariable=self.resultado_l2,
bg='#dfe3ee', font=("Arial",13,"bold")
).place(relx=0.05, rely=0.45, relwidth=0.9)
# ==========================
# 🟣 DESCONTO PROGRESSIVO
# ==========================
self.preco_dp = StringVar()
self.iva_dp = StringVar()
self.desc1 = StringVar()
self.desc2 = StringVar()
self.resultado_dp = StringVar()
Label(self.Desconto_progressivo, text="Preço base produto",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.05)
Entry(self.Desconto_progressivo, textvariable=self.preco_dp,
justify='center', font=("Arial",15,"bold")
).place(relx=0.45, rely=0.05, relwidth=0.45)
Label(self.Desconto_progressivo, text="IVA (%)",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.15)
self.iva_combo3 = ttk.Combobox(self.Desconto_progressivo,
textvariable=self.iva_dp,
values=[0,6,13,23],
state="readonly",
justify='center',
font=("Arial",15,"bold"))
self.iva_combo3.place(relx=0.45, rely=0.15, relwidth=0.45)
self.iva_combo3.current(3)
Label(self.Desconto_progressivo, text="1º Desconto (%)",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.25)
Entry(self.Desconto_progressivo, textvariable=self.desc1,
justify='center', font=("Arial",15,"bold")
).place(relx=0.45, rely=0.25, relwidth=0.45)
Label(self.Desconto_progressivo, text="2º Desconto (%)",
bg='#dfe3ee', fg='#107db2', font=("Arial",15,"bold")
).place(relx=0.05, rely=0.35)
Entry(self.Desconto_progressivo, textvariable=self.desc2,
justify='center', font=("Arial",15,"bold")
).place(relx=0.45, rely=0.35, relwidth=0.45)
Button(self.Desconto_progressivo, text="Calcular",
bg='#107db2', fg='white',
font=('verdana',12,'bold'),
command=self.calcular_progressivo
).place(relx=0.3, rely=0.5, relwidth=0.4)
Label(self.Desconto_progressivo, textvariable=self.resultado_dp,
bg='#dfe3ee', font=("Arial",13,"bold")
).place(relx=0.05, rely=0.65, relwidth=0.9)
# ==========================
# FUNÇÕES DE CÁLCULO
# ==========================
def calcular_desconto_simples(self):
try:
preco = float(self.preco_base1.get())
iva = float(self.iva1.get())
desconto = float(self.desconto1.get())
preco_com_iva = preco * (1 + iva/100)
preco_final = preco_com_iva * (1 - desconto/100)
poupanca = preco_com_iva - preco_final
perc = (poupanca / preco_com_iva) * 100
mensagem = (
f"Preço com IVA: {preco_com_iva:.2f}€\n"
f"Preço final: {preco_final:.2f}€\n"
f"Poupança: {poupanca:.2f}€\n"
f"Percentagem real: {perc:.2f}%"
)
except:
mensagem = "Valor inválido."
self.resultado1.set(mensagem)
def calcular_leve2(self):
try:
preco = float(self.preco_l2.get())
iva = float(self.iva_l2.get())
preco_com_iva = preco * (1 + iva/100)
preco_original = preco_com_iva * 2
preco_final = preco_com_iva
poupanca = preco_original - preco_final
perc = (poupanca / preco_original) * 100
mensagem = (
f"Total normal (2 unid.): {preco_original:.2f}€\n"
f"Total pago: {preco_final:.2f}€\n"
f"Poupança: {poupanca:.2f}€\n"
f"Percentagem real: {perc:.2f}%"
)
except:
mensagem = "Valor inválido."
self.resultado_l2.set(mensagem)
def calcular_progressivo(self):
try:
preco = float(self.preco_dp.get())
iva = float(self.iva_dp.get())
d1 = float(self.desc1.get())
d2 = float(self.desc2.get())
preco_com_iva = preco * (1 + iva/100)
preco1 = preco_com_iva * (1 - d1/100)
preco_final = preco1 * (1 - d2/100)
poupanca = preco_com_iva - preco_final
perc = (poupanca / preco_com_iva) * 100
mensagem = (
f"Preço final: {preco_final:.2f}€\n"
f"Poupança: {poupanca:.2f}€\n"
f"Percentagem real: {perc:.2f}%"
)
except:
mensagem = "Valor inválido."
self.resultado_dp.set(mensagem)
# ==========================
# MENU
# ==========================
def Quit(self):
self.root.destroy()
def Menus(self):
menubar = Menu(self.root)
self.root.config(menu=menubar)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Opções", menu=filemenu)
filemenu.add_command(label="Sair", command=self.Quit)
# ==========================
# EXECUTAR A APLICAÇÃO
# ==========================
appconverter()