add view class
This commit is contained in:
@@ -4,11 +4,12 @@ import threading
|
|||||||
|
|
||||||
from .serial_reader import WeightReader
|
from .serial_reader import WeightReader
|
||||||
from .config import DEFAULT_CALIB, DISPLAY_TYPES
|
from .config import DEFAULT_CALIB, DISPLAY_TYPES
|
||||||
|
from .views import NumberView
|
||||||
|
|
||||||
class WeightApp(tk.Tk):
|
class WeightApp(tk.Tk):
|
||||||
def __init__(self, weight_reader):
|
def __init__(self, weight_reader: WeightReader):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.weight_reader: WeightReader = weight_reader
|
self.weight_reader = weight_reader
|
||||||
|
|
||||||
self.toolbar = tk.Frame(self, padx=10)
|
self.toolbar = tk.Frame(self, padx=10)
|
||||||
self.toolbar.pack(side=tk.LEFT)
|
self.toolbar.pack(side=tk.LEFT)
|
||||||
@@ -43,29 +44,17 @@ class WeightApp(tk.Tk):
|
|||||||
self.update_calib_button = ttk.Button(self.reader_settings, text="Update Calibration", command=self.update_calib)
|
self.update_calib_button = ttk.Button(self.reader_settings, text="Update Calibration", command=self.update_calib)
|
||||||
self.update_calib_button.pack()
|
self.update_calib_button.pack()
|
||||||
|
|
||||||
self.display_type = tk.Frame(self.toolbar, pady=20)
|
self.view_type = tk.Frame(self.toolbar, pady=20)
|
||||||
self.display_type.pack()
|
self.view_type.pack()
|
||||||
self.display_type_label = ttk.Label(self.display_type, text="Visual:")
|
self.view_type_label = ttk.Label(self.view_type, text="Visual:")
|
||||||
self.display_type_label.pack(side=tk.LEFT)
|
self.view_type_label.pack(side=tk.LEFT)
|
||||||
self.display_type_select = ttk.Combobox(self.display_type, values=[t.value for t in DISPLAY_TYPES])
|
self.view_type_select = ttk.Combobox(self.view_type, values=[t.value for t in DISPLAY_TYPES], command=self.update_view)
|
||||||
self.display_type_select.set(DISPLAY_TYPES.NUMBER.value)
|
self.view_type_select.set(DISPLAY_TYPES.NUMBER.value)
|
||||||
self.display_type_select.pack(side=tk.LEFT)
|
self.view_type_select.pack(side=tk.LEFT)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### Display ####
|
#### Display ####
|
||||||
self.main_frame = tk.Frame(self, width=144, height=168, padx=50)
|
self.update_view()
|
||||||
self.main_frame.pack(side=tk.RIGHT)
|
|
||||||
|
|
||||||
#### Actions ####
|
|
||||||
self.actions = tk.Frame(self.main_frame)
|
|
||||||
self.actions.pack()
|
|
||||||
self.tare_button = ttk.Button(self.actions, text="Tare", command=self.weight_reader.tare)
|
|
||||||
self.tare_button.pack()
|
|
||||||
|
|
||||||
self.canvas = tk.Canvas(self.main_frame, width=144, height=168, background='white')
|
|
||||||
self.canvas.pack()
|
|
||||||
|
|
||||||
self.label = self.canvas.create_text(50, 68, text="0.0 g", font=("Arial", 18), fill='black', justify='left')
|
|
||||||
|
|
||||||
self.update_weight_display()
|
self.update_weight_display()
|
||||||
|
|
||||||
@@ -83,11 +72,11 @@ class WeightApp(tk.Tk):
|
|||||||
self.connect_button.config(text="Connect")
|
self.connect_button.config(text="Connect")
|
||||||
self.connect_button.pack_forget()
|
self.connect_button.pack_forget()
|
||||||
self.reader_settings.pack_forget()
|
self.reader_settings.pack_forget()
|
||||||
self.actions.pack_forget()
|
self.view.actions.pack_forget()
|
||||||
self.connection_settings.pack()
|
self.connection_settings.pack()
|
||||||
self.connect_button.pack()
|
self.connect_button.pack()
|
||||||
self.reader_settings.pack()
|
self.reader_settings.pack()
|
||||||
self.actions.pack()
|
self.view.pack()
|
||||||
|
|
||||||
def update_devices(self):
|
def update_devices(self):
|
||||||
self.weight_reader.scan_devices()
|
self.weight_reader.scan_devices()
|
||||||
@@ -97,12 +86,25 @@ class WeightApp(tk.Tk):
|
|||||||
|
|
||||||
def update_calib(self):
|
def update_calib(self):
|
||||||
self.weight_reader.calib_factor = self.calib_weight.get() / float(self.calib_measurements.get())
|
self.weight_reader.calib_factor = self.calib_weight.get() / float(self.calib_measurements.get())
|
||||||
|
|
||||||
|
|
||||||
|
def update_view(self):
|
||||||
|
selected_view = self.view_type_select.get()
|
||||||
|
if selected_view == DISPLAY_TYPES.NUMBER:
|
||||||
|
self.view = NumberView(self,
|
||||||
|
tare_command=self.weight_reader.tare,
|
||||||
|
calibrate_command=self.calibrate,
|
||||||
|
padx=50)
|
||||||
|
self.view.pack(side=tk.RIGHT)
|
||||||
|
else:
|
||||||
|
raise Exception(f"View {selected_view} not found.")
|
||||||
|
|
||||||
def update_weight_display(self):
|
def update_weight_display(self):
|
||||||
weight = self.weight_reader.value
|
weight = self.weight_reader.value
|
||||||
self.canvas.itemconfig(self.label, text=f"{weight:.1f} g")
|
self.view.update_weight(weight)
|
||||||
self.after(100, self.update_weight_display)
|
self.after(100, self.update_weight_display)
|
||||||
|
|
||||||
|
def calibrate(self):
|
||||||
|
...
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
weight_reader = WeightReader()
|
weight_reader = WeightReader()
|
||||||
|
|||||||
1
frontend/views/__init__.py
Normal file
1
frontend/views/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .number import NumberView
|
||||||
24
frontend/views/base.py
Normal file
24
frontend/views/base.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
from tkinter import ttk, Frame, Canvas
|
||||||
|
|
||||||
|
class View(Frame):
|
||||||
|
|
||||||
|
def __init__(self, *args, tare_command=None, calibrate_command=None, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
self.actions = Frame(self)
|
||||||
|
self.actions.pack()
|
||||||
|
# self.calibrate_button = ttk.Button(self.actions, text="Calibrate", command=calibrate_command)
|
||||||
|
# self.calibrate_button.pack()
|
||||||
|
self.tare_button = ttk.Button(self.actions, text="Tare", command=tare_command)
|
||||||
|
self.tare_button.pack()
|
||||||
|
|
||||||
|
self.canvas = Canvas(self, width=144, height=168, background='white')
|
||||||
|
self.canvas.pack()
|
||||||
|
|
||||||
|
self._init_canvas()
|
||||||
|
|
||||||
|
def _init_canvas(self):
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def update_weight(self, weight: float):
|
||||||
|
raise NotImplementedError()
|
||||||
9
frontend/views/number.py
Normal file
9
frontend/views/number.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from .base import View
|
||||||
|
|
||||||
|
class NumberView(View):
|
||||||
|
|
||||||
|
def _init_canvas(self):
|
||||||
|
self.label = self.canvas.create_text(50, 68, text="0.0 g", font=("Arial", 18), fill='black', justify='left')
|
||||||
|
|
||||||
|
def update_weight(self, weight):
|
||||||
|
self.canvas.itemconfig(self.label, text=f"{weight:.1f} g")
|
||||||
Reference in New Issue
Block a user