mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-03 07:51:16 -05:00
74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
|
"""
|
||
|
A basic widget for showing the progress
|
||
|
being made in a task.
|
||
|
|
||
|
"""
|
||
|
|
||
|
from Tkinter import *
|
||
|
|
||
|
class Smeter:
|
||
|
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:
|
||
|
dB=int((value-50.0)/2.5)
|
||
|
t='%d dB'%dB
|
||
|
self.canvas.itemconfig(self.label, text=t)
|
||
|
self.canvas.update_idletasks()
|