Mundo em Python

Parábola com Gráfico (em tkinter)


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()


0