mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-25 12:42:41 -06:00
84 lines
3.1 KiB
Python
84 lines
3.1 KiB
Python
|
"""
|
||
|
A basic widget for showing the progress being made in a task.
|
||
|
"""
|
||
|
|
||
|
__all__ = ['ProgressBar']
|
||
|
|
||
|
from direct.showbase.TkGlobal import *
|
||
|
from Tkinter import *
|
||
|
|
||
|
class ProgressBar:
|
||
|
def __init__(self, master=None, orientation="horizontal",
|
||
|
min=0, max=100, width=100, height=18,
|
||
|
doLabel=1, appearance="sunken",
|
||
|
fillColor="blue", background="gray",
|
||
|
labelColor="yellow", labelFont="Verdana",
|
||
|
labelText="", labelFormat="%d%%",
|
||
|
value=50, bd=2):
|
||
|
# preserve various values
|
||
|
self.master=master
|
||
|
self.orientation=orientation
|
||
|
self.min=min
|
||
|
self.max=max
|
||
|
self.width=width
|
||
|
self.height=height
|
||
|
self.doLabel=doLabel
|
||
|
self.fillColor=fillColor
|
||
|
self.labelFont= labelFont
|
||
|
self.labelColor=labelColor
|
||
|
self.background=background
|
||
|
self.labelText=labelText
|
||
|
self.labelFormat=labelFormat
|
||
|
self.value=value
|
||
|
self.frame=Frame(master, relief=appearance, bd=bd)
|
||
|
self.canvas=Canvas(self.frame, height=height, width=width, bd=0,
|
||
|
highlightthickness=0, background=background)
|
||
|
self.scale=self.canvas.create_rectangle(0, 0, width, height,
|
||
|
fill=fillColor)
|
||
|
self.label=self.canvas.create_text(self.canvas.winfo_reqwidth() / 2,
|
||
|
height / 2, text=labelText,
|
||
|
anchor="c", fill=labelColor,
|
||
|
font=self.labelFont)
|
||
|
self.update()
|
||
|
self.canvas.pack(side='top', fill='x', expand='no')
|
||
|
|
||
|
def updateProgress(self, newValue, newMax=None):
|
||
|
if newMax:
|
||
|
self.max = newMax
|
||
|
self.value = newValue
|
||
|
self.update()
|
||
|
|
||
|
def update(self):
|
||
|
# Trim the values to be between min and max
|
||
|
value=self.value
|
||
|
if value > self.max:
|
||
|
value = self.max
|
||
|
if value < self.min:
|
||
|
value = self.min
|
||
|
# Adjust the rectangle
|
||
|
if self.orientation == "horizontal":
|
||
|
self.canvas.coords(self.scale, 0, 0,
|
||
|
float(value) / self.max * self.width, self.height)
|
||
|
else:
|
||
|
self.canvas.coords(self.scale, 0,
|
||
|
self.height - (float(value) / self.max*self.height),
|
||
|
self.width, self.height)
|
||
|
# Now update the colors
|
||
|
self.canvas.itemconfig(self.scale, fill=self.fillColor)
|
||
|
self.canvas.itemconfig(self.label, fill=self.labelColor)
|
||
|
# And update the label
|
||
|
if self.doLabel:
|
||
|
if value:
|
||
|
if value >= 0:
|
||
|
pvalue = int((float(value) / float(self.max)) * 100.0)
|
||
|
else:
|
||
|
value = 0
|
||
|
self.canvas.itemconfig(self.label,
|
||
|
text=self.labelFormat % value)
|
||
|
else:
|
||
|
self.canvas.itemconfig(self.label, text='')
|
||
|
else:
|
||
|
self.canvas.itemconfig(self.label,
|
||
|
text=self.labelFormat % self.labelText)
|
||
|
self.canvas.update_idletasks()
|