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 Senoide:
def __init__(self, ax, label):
self.amplitude = tk.DoubleVar(value=100.0)
self.frequencia = tk.DoubleVar(value=60.0)
self.defasagem = tk.DoubleVar(value=0.0)
self.tempo = np.arange(0, 0.1, 0.00001)
self.label = label
self.ax = ax

def plotar_senoide(self):
senoide = self.amplitude.get() * np.sin(2 * np.pi * self.frequencia.get() *
self.tempo + np.radians(self.defasagem.get()))

self.ax.plot(self.tempo, senoide, label=self.label)


self.ax.legend()
self.ax.set_xlim([self.tempo[0], self.tempo[-1]])
self.ax.set_ylim(bottom=-200, top=200) # Fixa o eixo y de -200 a 200
self.ax.grid(True) # Adiciona as grades ao gráfico

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

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)

self.senoide1 = Senoide(self.ax, "Senoide 1")


self.senoide2 = Senoide(self.ax, "Senoide 2")

self.criar_controles()

# Chama o método inicial de atualização dos gráficos


self.atualizar_senoides()

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

def criar_controles(self):
ttk.Label(self.root, text="Amplitude").pack(side=tk.LEFT, padx=10)
self.slider_amplitude1 = ttk.Scale(self.root,
variable=self.senoide1.amplitude, from_=0, to=200, orient=tk.HORIZONTAL,
length=200, command=self.atualizar_senoides)
self.slider_amplitude1.pack(side=tk.LEFT)
ttk.Label(self.root, text="Frequência (Hz)").pack(side=tk.LEFT, padx=10)
self.slider_frequencia1 = ttk.Scale(self.root,
variable=self.senoide1.frequencia, from_=0, to=70, orient=tk.HORIZONTAL,
length=200, command=self.atualizar_senoides)
self.slider_frequencia1.pack(side=tk.LEFT)

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


self.slider_defasagem1 = ttk.Scale(self.root,
variable=self.senoide1.defasagem, from_=0, to=360, orient=tk.HORIZONTAL,
length=200, command=self.atualizar_senoides)
self.slider_defasagem1.pack(side=tk.LEFT)

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


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

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


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

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


self.slider_defasagem2 = ttk.Scale(self.root,
variable=self.senoide2.defasagem, from_=0, to=360, orient=tk.HORIZONTAL,
length=200, command=self.atualizar_senoides)
self.slider_defasagem2.pack(side=tk.LEFT)

def atualizar_senoides(self, event=None):


self.ax.clear() # Limpa o eixo antes de replotar
self.senoide1.plotar_senoide()
self.senoide2.plotar_senoide()
self.canvas.draw()

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

You might also like