from tkinter import *
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
root = Tk()
root.geometry("800x600")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Parábola com Gráfico")
# Título
titulo = Label(text="Concavidade e Gráfico da Parábola",
font=("Arial", 20, "bold"),
bg="#103030", fg="#49e3e3")
titulo.pack(pady=10)
# Entradas
frame = Frame(root, bg="#103030")
frame.pack(pady=10)
Label(frame, text="a:", font=("Arial", 14), bg="#103030", fg="white").grid(row=0, column=0)
Label(frame, text="b:", font=("Arial", 14), bg="#103030", fg="white").grid(row=1, column=0)
Label(frame, text="c:", font=("Arial", 14), bg="#103030", fg="white").grid(row=2, column=0)
a = StringVar()
b = StringVar()
c = StringVar()
Entry(frame, textvariable=a, width=10).grid(row=0, column=1)
Entry(frame, textvariable=b, width=10).grid(row=1, column=1)
Entry(frame, textvariable=c, width=10).grid(row=2, column=1)
# Resultado
resultado_texto = Label(root, text="", font=("Arial", 12),
bg="#cfe2f3", justify="left")
resultado_texto.pack(pady=10, fill="x")
# Área do gráfico
fig, ax = plt.subplots(figsize=(5, 3))
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack()
def limpar():
a.set("")
b.set("")
c.set("")
resultado_texto.config(text="")
ax.clear()
canvas.draw()
def app():
try:
va = float(a.get())
vb = float(b.get())
vc = float(c.get())
if va == 0:
resultado_texto.config(text="Não é uma parábola (a ≠ 0).")
return
# Vértice
xv = -vb / (2 * va)
yv = va * xv**2 + vb * xv + vc
mensagem = f"Equação: y = {va}x² + {vb}x + {vc}\n"
mensagem += f"Vértice: ({xv:.2f}, {yv:.2f})\n"
if va > 0:
mensagem += "Concavidade: para cima"
else:
mensagem += "Concavidade: para baixo"
resultado_texto.config(text=mensagem)
# GRÁFICO
x = np.linspace(xv - 10, xv + 10, 400)
y = va*x**2 + vb*x + vc
ax.clear()
ax.plot(x, y, label="Parábola")
# vértice destacado
ax.scatter(xv, yv, color="red", label="Vértice", s=80)
ax.axhline(0, color="black", linewidth=1)
ax.axvline(0, color="black", linewidth=1)
ax.legend()
ax.grid(True)
canvas.draw()
except ValueError:
resultado_texto.config(text="Digite valores numéricos válidos")
Button(root, text="Calcular", command=app,
bg="#107db2", fg="white", font=("Arial", 12)).pack(pady=5)
Button(root, text="Limpar", command=limpar,
bg="#107db2", fg="white", font=("Arial", 12)).pack(pady=5)
Button(root, text="Sair", command=root.destroy,
bg="#107db2", fg="white", font=("Arial", 12)).pack(pady=5)
root.mainloop()