Untitled

 avatar
unknown
plain_text
6 months ago
2.5 kB
3
Indexable
class CircleProgress(tk.Canvas):
    def __init__(self, parent, size=150, bg_color="#ffffff", **kwargs):
        # Extract custom properties, removing them from kwargs to avoid passing to Canvas
        self.circle_color = kwargs.pop('circle_color', '#808080')
        self.ring_color = kwargs.pop('ring_color', '#2C3E50')
        self.name = kwargs.pop('name', '')  # Store the name for display purposes
        
        super().__init__(parent, width=size, height=size, bg=bg_color, highlightthickness=0, **kwargs)
        
        self.size = size
        self.percentage = 0
        self.target_percentage = 0
        self.warning_threshold = 90
        self.animation_speed = 0.05
        self.is_animating = False
        
        # Calculate dimensions
        self.center = size // 2
        self.radius = (size * 0.8) // 2
        self.ring_width = size * 0.1
        
        self._draw_initial_state()
        
    def _draw_initial_state(self):
        # Draw base circle with a solid gray color for the shadow
        self.create_oval(
            self.center - self.radius - 5,
            self.center - self.radius - 5,
            self.center + self.radius + 5,
            self.center + self.radius + 5,
            fill='#AAAAAA',  # Light gray for shadow without alpha
            width=0
        )
        
        # Draw main circle
        self.circle = self.create_oval(
            self.center - self.radius,
            self.center - self.radius,
            self.center + self.radius,
            self.center + self.radius,
            fill=self.circle_color,
            width=0
        )
        
        # Display name text with shadow
        self.create_text(
            self.center,
            self.center + 1,
            text=self.name,
            fill='#666666',  # Darker gray for text shadow
            font=('Helvetica', int(self.size * 0.12), 'bold')
        )
        
        # Display name in white text
        self.text = self.create_text(
            self.center,
            self.center,
            text=self.name,
            fill='white',
            font=('Helvetica', int(self.size * 0.12), 'bold')
        )
        
        # Display percentage text
        self.percentage_text = self.create_text(
            self.center,
            self.center + self.size * 0.2,
            text='0%',
            fill='white',
            font=('Helvetica', int(self.size * 0.15), 'bold')
        )
Editor is loading...
Leave a Comment