Files
evaluation/filter_dev/app.py
2025-04-13 22:55:55 +02:00

92 lines
2.9 KiB
Python

import tkinter as tk
from tkinter import ttk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from .filter import *
from .gui.device import Device
class FilterDevApp:
def __init__(self, root):
self.filter = None
self.root = root
self.root.title("JannTers Filter Evaluation Tool")
# Create a frame for the plot and sliders
self.frame = tk.Frame(self.root)
self.frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
# Create a figure for plotting
self.fig, self.ax = plt.subplots()
self.canvas = FigureCanvasTkAgg(self.fig, master=self.frame)
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
# Create a frame for sliders
self.toolbar = tk.Frame(self.root)
self.toolbar.pack(side=tk.RIGHT, fill=tk.Y)
# Device Settings
self.device_label = ttk.Label(self.toolbar, text="Device Name:")
self.device_label.pack(pady=10)
self.device_name = ttk.Entry(self.toolbar)
self.device_name.insert(0, "Smaage") # Set default value
self.device_name.pack(pady=10)
self.device = Device(self.device_name)
self.connect_button = ttk.Button(self.toolbar, text="Connect Device", command=self.device.connect)
self.connect_button.pack(pady=10)
# Filter Settings
self.filter_type_label = ttk.Label(self.toolbar, text="Filter:")
self.filter_type_label.pack(pady=10)
self.filter_type_combobox = ttk.Combobox(self.toolbar, values=["MovAvg"])
self.filter_type_combobox.set("MovAvg") # Set default value
self.filter_type_combobox.pack(pady=10)
self.change_filter = ttk.Button(self.toolbar, text="Change Filter", command=self.update_filter)
self.change_filter.pack(pady=10)
# Objects
self.filter = MovAvg(self.device, self.toolbar, self.update_plot)
# Initial plot
self.update_plot()
def update_plot(self, *args):
if self.filter is None:
return
# Clear the current plot
self.ax.clear()
# Get current values from sliders
df = self.filter()
# Generate data
x = df['timestamps']
y1 = df['weights']
y2 = df['filtered']
# Plot the data
self.ax.plot(x, y1)
self.ax.plot(x, y2)
self.ax.set_xlabel("Time in ms")
self.ax.set_ylabel("Weight")
self.ax.grid()
# Draw the updated plot
self.canvas.draw()
def update_filter(self):
option = self.filter_type_combobox.get()
if option == 'MovAvg' and not isinstance(self.filter, MovAvg):
self.filter = MovAvg(self.device, self.toolbar, self.update_plot)
self.update_plot()
if __name__ == "__main__":
root = tk.Tk()
app = FilterDevApp(root)
root.mainloop()