Untitled
unknown
plain_text
a year ago
2.5 kB
6
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