import tkinter as tk from tkinter import ttk from PIL import Image, ImageDraw, ImageChops from .base import View class CircleView(View): 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) 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() try: target = float(self.target.get()) weight_radius = weight / target * self.target_r 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