Initial commit
This commit is contained in:
77
app/params.py
Executable file
77
app/params.py
Executable file
@ -0,0 +1,77 @@
|
||||
import tkinter as tk
|
||||
from dataclasses import dataclass
|
||||
|
||||
import ttkbootstrap as ttk
|
||||
|
||||
|
||||
@dataclass
|
||||
class Parameter:
|
||||
var: tk.IntVar | tk.DoubleVar
|
||||
slider: ttk.Scale
|
||||
|
||||
|
||||
class ParameterTuner(tk.Frame):
|
||||
def __init__(self, parent, *args, **kwargs):
|
||||
super().__init__(parent, *args, *kwargs)
|
||||
|
||||
self._params: dict[int, Parameter] = {}
|
||||
|
||||
def add(self, name: str, value: int | float, min_value: int | float, max_value: int | float) -> int:
|
||||
frame = tk.Frame(self, width=200)
|
||||
|
||||
if isinstance(value, int):
|
||||
var = tk.IntVar(frame, value=value)
|
||||
labelformat = "{name}: {value}"
|
||||
else:
|
||||
var = tk.DoubleVar(frame, value=value)
|
||||
labelformat = "{name}: {value:.2f}"
|
||||
|
||||
label = tk.Label(frame, text=f"{name}: {var.get()}")
|
||||
slider = ttk.Scale(
|
||||
frame,
|
||||
variable=var,
|
||||
from_=min_value,
|
||||
to=max_value,
|
||||
length=200,
|
||||
orient=tk.HORIZONTAL,
|
||||
)
|
||||
|
||||
var.trace_add(
|
||||
"write",
|
||||
lambda v, index, mode: label.configure(text=labelformat.format(name=name, value=var.get())),
|
||||
)
|
||||
|
||||
label.pack()
|
||||
slider.pack()
|
||||
|
||||
frame.pack(side=tk.RIGHT, padx=10)
|
||||
|
||||
param_id = len(self._params)
|
||||
self._params[param_id] = Parameter(var, slider)
|
||||
return param_id
|
||||
|
||||
def get(self, param_id: int) -> int | float:
|
||||
return self._params[param_id].var.get()
|
||||
|
||||
def set(self, param_id: int, value: int | float):
|
||||
self._params[param_id].var.set(value)
|
||||
|
||||
def get_slider(self, param_id: int) -> ttk.Scale:
|
||||
return self._params[param_id].slider
|
||||
|
||||
def set_state(self, state: str, param_id: int = None):
|
||||
if param_id is not None:
|
||||
self._params[param_id].slider.configure(state=state)
|
||||
else:
|
||||
for param in self._params.values():
|
||||
param.slider.configure(state=state)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main = tk.Tk()
|
||||
pt = ParameterTuner(main)
|
||||
param1 = pt.add("Frameabstand", 30, 1, 60)
|
||||
param2 = pt.add("Schwellenwert", 0.2, 0, 5)
|
||||
pt.pack()
|
||||
|
||||
main.mainloop()
|
||||
Reference in New Issue
Block a user