from tkinter import *
from tkinter import ttk
# Função para calcular percentagem de defeito
def calcular_percentagem_defeito(produtos_feitos, produtos_defeituosos):
if produtos_feitos == 0:
return 0
return (produtos_defeituosos / produtos_feitos) * 100
# Função para adicionar lote à tabela
def adicionar_lote():
try:
feitos = float(Total_produtos_feitos.get())
defeitos = float(Total_produtos_defeito.get())
if feitos <= 0 or defeitos < 0:
resultado_texto.config(text="Valores inválidos. Total > 0 e defeitos ≥ 0.")
return
if defeitos > feitos:
resultado_texto.config(text="Defeitos não podem ser maiores que produtos feitos.")
return
percentagem = calcular_percentagem_defeito(feitos, defeitos)
tabela.insert('', END, values=(feitos, defeitos, f"{percentagem:.2f}%"))
resultado_texto.config(text=f"Lote adicionado. Percentagem: {percentagem:.2f}%")
limpar_entradas()
except ValueError:
resultado_texto.config(text="Por favor, insira valores numéricos válidos.")
# Função para limpar entradas
def limpar_entradas():
Total_produtos_feitos_entrada.delete(0, END)
Total_produtos_defeito_entrada.delete(0, END)
Total_produtos_feitos_entrada.focus()
# Função para limpar tabela
def limpar_tabela():
for item in tabela.get_children():
tabela.delete(item)
resultado_texto.config(text="Tabela limpa.")
# Janela principal
root = Tk()
root.geometry("800x500")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Controle de Qualidade - Percentagem de Defeito")
# Título
titulo = Label(
text="Controle de Qualidade - Percentagem de Defeito",
font=("Arial", 24, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.pack(pady=10)
# Frame para entradas
frame_entradas = Frame(root, bg="#103030")
frame_entradas.pack(pady=10)
# Labels e Entradas
Label(frame_entradas, text="Total de produtos feitos:", font=("Arial", 14, "bold"), bg="#103030", fg="#49e3e3").grid(row=0, column=0, padx=10, pady=5, sticky=W)
Total_produtos_feitos = StringVar()
Total_produtos_feitos_entrada = Entry(frame_entradas, textvariable=Total_produtos_feitos, font=("Arial", 12, "bold"), justify='center')
Total_produtos_feitos_entrada.grid(row=0, column=1, padx=10, pady=5)
Label(frame_entradas, text="Total de produtos com defeito:", font=("Arial", 14, "bold"), bg="#103030", fg="#49e3e3").grid(row=1, column=0, padx=10, pady=5, sticky=W)
Total_produtos_defeito = StringVar()
Total_produtos_defeito_entrada = Entry(frame_entradas, textvariable=Total_produtos_defeito, font=("Arial", 12, "bold"), justify='center')
Total_produtos_defeito_entrada.grid(row=1, column=1, padx=10, pady=5)
# Botões de ação
frame_botoes = Frame(root, bg="#103030")
frame_botoes.pack(pady=10)
Button(frame_botoes, text="Adicionar Lote", bg="#107db2", fg="white", font=("Verdana", 12, "bold"), command=adicionar_lote).grid(row=0, column=0, padx=10, pady=5)
Button(frame_botoes, text="Limpar Entradas", bg="#107db2", fg="white", font=("Verdana", 12, "bold"), command=limpar_entradas).grid(row=0, column=1, padx=10, pady=5)
Button(frame_botoes, text="Limpar Tabela", bg="#107db2", fg="white", font=("Verdana", 12, "bold"), command=limpar_tabela).grid(row=0, column=2, padx=10, pady=5)
Button(frame_botoes, text="Sair", bg="#107db2", fg="white", font=("Verdana", 12, "bold"), command=root.destroy).grid(row=0, column=3, padx=10, pady=5)
# Label do resultado
resultado_texto = Label(root, text="", font=("Arial", 14, "bold"), bg="#103030", fg="#49e3e3", justify="center")
resultado_texto.pack(pady=5)
# Tabela para múltiplos lotes
colunas = ("Produtos Feitos", "Produtos Defeituosos", "Percentagem")
tabela = ttk.Treeview(root, columns=colunas, show='headings', height=10)
for col in colunas:
tabela.heading(col, text=col)
tabela.column(col, anchor=CENTER, width=200)
tabela.pack(pady=10)
root.mainloop()