Fator

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 2

import tkinter as tk

from tkinter import ttk


from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import numpy as np

class SenoideApp:
def __init__(self, root):
self.root = root
self.root.title("Gráfico de Senoide")

self.amplitude = tk.DoubleVar(value=100.0)
self.frequencia = tk.DoubleVar(value=60.0)
self.tempo = np.arange(0, 0.1, 0.00001)

self.figura, self.ax = self.criar_grafico_senoide()


self.canvas = FigureCanvasTkAgg(self.figura, master=self.root)
self.canvas_widget = self.canvas.get_tk_widget()
self.canvas_widget.pack(side=tk.TOP, fill=tk.BOTH, expand=1)

ttk.Label(self.root, text="Amplitude").pack(side=tk.LEFT, padx=10)


self.slider_amplitude = ttk.Scale(self.root, variable=self.amplitude,
from_=0, to=200, orient=tk.HORIZONTAL, length=200, command=self.atualizar_senoide)
self.slider_amplitude.pack(side=tk.LEFT)

self.label_amplitude = ttk.Label(self.root, text=f"Amplitude:


{self.amplitude.get():.2f}")
self.label_amplitude.pack(side=tk.LEFT)

ttk.Label(self.root, text="Frequência (Hz)").pack(side=tk.LEFT, padx=10)


self.slider_frequencia = ttk.Scale(self.root, variable=self.frequencia,
from_=0, to=70, orient=tk.HORIZONTAL, length=200, command=self.atualizar_senoide)
self.slider_frequencia.pack(side=tk.LEFT)

self.label_frequencia = ttk.Label(self.root, text=f"Frequência:


{self.frequencia.get():.2f}")
self.label_frequencia.pack(side=tk.LEFT)

# Chama o método inicial de atualização do gráfico


self.atualizar_senoide()

def criar_grafico_senoide(self):
figura, ax = Figure(figsize=(10, 4), dpi=100), None
if figura:
ax = figura.add_subplot(111)
ax.set_title("Senoide")
ax.set_xlabel("Tempo (s)")
ax.set_ylabel("Amplitude (V)")
ax.grid(True) # Adiciona as grades ao gráfico
return figura, ax

def plotar_senoide(self):
senoide = self.amplitude.get() * np.sin(2 * np.pi * self.frequencia.get() *
self.tempo)
self.ax.clear()
self.ax.plot(self.tempo, senoide, label=f"Amplitude =
{self.amplitude.get():.2f} V, Frequência = {self.frequencia.get():.2f} Hz")
self.ax.legend()
self.ax.set_ylim(bottom=-200, top=200) # Fixa o eixo y de -200 a 200
self.ax.grid(True) # Garante que as grades estejam visíveis
self.canvas.draw()

def atualizar_senoide(self, event=None):


self.label_amplitude["text"] = f"Amplitude: {self.amplitude.get():.2f}"
self.label_frequencia["text"] = f"Frequência: {self.frequencia.get():.2f}"
self.plotar_senoide()

if __name__ == "__main__":
root = tk.Tk()
app = SenoideApp(root)
root.mainloop()

You might also like