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