mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -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()
							 |