import tkinter as tk from tkinter import ttk from PIL import Image, ImageDraw, ImageChops from .base import View class NumberCircleView(View): def _init_ui(self): self.target_frame = tk.Frame(self.actions) self.target_frame.pack() self.target_label = ttk.Label(self.target_frame, text="Target (g)") self.target_label.pack(side=tk.LEFT) self.target = ttk.Entry(self.target_frame) 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) self.target_r = min(self.center)-10 draw.circle(self.center, self.target_r, outline="#000000") return im def update_weight(self, weight): weight_radius = 0.0 bkg_im = self.bkg_im.copy() draw = ImageDraw.Draw(bkg_im) draw.text((50, 68), f"{weight:.1f} g", fill='black', font_size=24) try: target = float(self.target.get()) weight_radius = weight / target * self.target_r circle_im = Image.new('1', self.size, 'black') circle_draw = ImageDraw.Draw(circle_im) if weight_radius > 0.1: circle_draw.circle(self.center, weight_radius, fill="#FFFFFF") return ImageChops.logical_xor(bkg_im, circle_im) except Exception as e: print('Invalid target value:', e) pass return bkg_im