Files
frontend-dev/frontend/views/circle.py
Jannes Magnusson 851b894e5f add timer
2025-10-17 17:47:20 +02:00

49 lines
1.5 KiB
Python

import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageDraw, ImageChops
from .base import View
class CircleView(View):
def __init__(self, parent, size, center, radius_offset=10, **kwargs):
self.target_radius = min(center) - radius_offset
super().__init__(parent, size, center, **kwargs)
def init_ui(self, parent):
self.ui = tk.Frame(parent)
self.ui.pack()
self.target_label = ttk.Label(self.ui, text="Target (g)")
self.target_label.pack(side=tk.LEFT)
self.target = ttk.Entry(self.ui)
self.target.insert(0, 100.0)
self.target.pack(side=tk.LEFT)
def _init_im(self):
im = Image.new('1', self.size, 'white')
draw = ImageDraw.Draw(im)
draw.circle(self.center, self.target_radius,
outline="#000000")
return im
def update_weight(self, weight):
weight_radius = 0.0
bkg_im = self.bkg_im.copy()
try:
target = float(self.target.get())
weight_radius = weight / target * self.target_radius
im = Image.new('1', self.size, 'black')
draw = ImageDraw.Draw(im)
if weight_radius > 0.1:
draw.circle(self.center, weight_radius, fill="#FFFFFF")
return ImageChops.logical_xor(bkg_im, im)
except Exception as e:
print('Invalid target value:', e)
pass
return bkg_im