Python GUI Tk : Scale

 Canvas paint: controlled by Scale

from Tkinter import *

class ScaleDemo( Frame ):
   def __init__( self ):
      Frame.__init__( self )
      self.pack( expand = YES, fill = BOTH )
      self.master.title( "Scale Demo" )
      self.master.geometry( "220x270" )

      self.control = Scale( self, 
                            from_ = 0, 
                            to = 200, 
                            orient = HORIZONTAL, 
                            command = self.updateCircle )
                            
      self.control.pack( side = BOTTOM, fill = X )
      self.control.set( 10 )

      self.display = Canvas( self, bg = "white" )
      self.display.pack( expand = YES, fill = BOTH )

   def updateCircle( self, scaleValue ):
      end = int( scaleValue ) + 10
      self.display.delete( "circle" )
      self.display.create_oval( 10, 10, end, end,fill = "black", tags = "circle" )

def main():
   ScaleDemo().mainloop()   

if __name__ == "__main__":
   main()

Scale Demo: random choice

from Tkinter import *
import random
root = Tk()

class Indicator:
    def __init__(self, master=None, label='', value=0.0):
  self.var = DoubleVar()
  self.s = Scale(master, 
                 label=label, 
                 variable=self.var,
               from_=0.0, 
               to=300.0, 
               orient=HORIZONTAL,
               length=300)
  self.var.set(value)
  self.s.pack()
  
def setTemp():
    slider = random.choice(range(10))
    value  = random.choice(range(0, 300))
    slist[slider].var.set(value)
    root.after(5, setTemp)
    
slist = []
for i in range(5):
    slist.append(Indicator(root, label='Probe %d' % (i+1)))

setTemp()
root.mainloop()


Use Scale

from Tkinter import *
import string


root = Tk()
root.title('Scale')

scale = Scale(root, 
              orient=VERTICAL, 
              length=284, 
              from_=0, 
              to=250,
              tickinterval=50)
              
scale.grid(row=0, column=0, sticky='NE')

scale.set(100)

root.mainloop()
Bound Scale action with a canvas
from Tkinter import *
import string


def setHeight(canvas, heightStr):
    height = string.atoi(heightStr)
    height = height + 21
    y2 = height - 30
    if y2 < 21:
        y2 = 21
    canvas.coords('poly', 15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20)
    canvas.coords('line', 15,20,35,20,35,y2,45,y2,25,height,5,y2,15,y2,15,20)

root = Tk()
root.title('Scale')

canvas = Canvas(root, width=50, height=50, bd=0, highlightthickness=0)

canvas.create_polygon(0,0,1,1,2,2, fill='cadetblue', tags='poly')

canvas.create_line(0,0,1,1,2,2,0,0, fill='black', tags='line')

scale = Scale(root, 
              orient=VERTICAL, 
              length=284, 
              from_=0, 
              to=250,
              tickinterval=50, 
              command=lambda h, c=canvas:setHeight(c,h))

scale.grid(row=0, column=0, sticky='NE')

canvas.grid(row=0, column=1, sticky='NWSE')

scale.set(100)

root.mainloop()
Scale widget
from Tkinter import *

class AllTkinterWidgets:
    def __init__(self, master):
        frame = Frame(master, width=500, height=400, bd=1)
        frame.pack()

        iframe5 = Frame(frame, bd=2, relief=RAISED)
        Scale(iframe5, from_=0.0, to=50.0, label='Scale widget',
              orient=HORIZONTAL).pack(side=LEFT)
        iframe5.pack(expand=1, fill=X, pady=10, padx=5)
        
    
root = Tk()

all = AllTkinterWidgets(root)

root.mainloop()

Scale Demo: get scale value and open different dialogs

from Tkinter import *


from tkFileDialog   import askopenfilename        
from tkColorChooser import askcolor               
from tkMessageBox   import askquestion, showerror
from tkSimpleDialog import askfloat

from tkMessageBox import askokcancel           

class Quitter(Frame):                          
    def __init__(self, parent=None):           
        Frame.__init__(self, parent)
        self.pack()
        widget = Button(self, text='Quit', command=self.quit)
        widget.pack(expand=YES, fill=BOTH, side=LEFT)
    def quit(self):
        ans = askokcancel('Verify exit', "Really quit?")
        if ans: Frame.quit(self)



demos = {
    'Open':  askopenfilename, 
    'Color': askcolor,
    'Query': lambda: askquestion('Warning', 'query'),
    'Error': lambda: showerror('Error!', "Error"),
    'Input': lambda: askfloat('Entry', 'Input')
}

class Demo(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.pack()
        Label(self, text="Scale demos").pack()
        self.var = IntVar()
        Scale(self, label='Pick demo number',
                    command=self.onMove,     
                    variable=self.var,       
                    from_=0, to=len(demos)-1).pack()
        Scale(self, label='Pick demo number',
                    command=self.onMove,     
                    variable=self.var,       
                    from_=0, to=len(demos)-1,
                    length=200, tickinterval=1,
                    showvalue=YES, orient='horizontal').pack()
        Quitter(self).pack(side=RIGHT)
        Button(self, text="Run demo", command=self.onRun).pack(side=LEFT)
        Button(self, text="State",    command=self.report).pack(side=RIGHT)
    def onMove(self, value):
        print 'in onMove', value
    def onRun(self):
        pos = self.var.get()
        print 'You picked', pos
        pick = demos.keys()[pos]    
        print demos[pick]()
    def report(self):
        print self.var.get()

if __name__ == '__main__': 
    print demos.keys()
    Demo().mainloop()

Scale: get Scale value

from Tkinter import *
root = Tk()
scl = Scale(root, from_=-100, to=100, tickinterval=50, resolution=10)
scl.pack(expand=YES, fill=Y)

def report(): print scl.get()

Button(root, text='state', command=report).pack(side=RIGHT)
root.mainloop()

Scale used to control the size of a circle

from Tkinter import *

class ScaleDemo( Frame ):
   def __init__( self ):
      Frame.__init__( self )
      self.pack( expand = YES, fill = BOTH )
      self.master.title( "Scale Demo" )
      self.master.geometry( "220x270" )

      self.control = Scale( self, from_ = 0, to = 200, orient = HORIZONTAL, command = self.updateCircle )
      self.control.pack( side = BOTTOM, fill = X )
      self.control.set( 10 )

      self.display = Canvas( self, bg = "white" )
      self.display.pack( expand = YES, fill = BOTH )

   def updateCircle( self, scaleValue ):
      end = int( scaleValue ) + 10
      self.display.delete( "circle" )
      self.display.create_oval( 10, 10, end, end,fill = "black", tags = "circle" )

def main():
   ScaleDemo().mainloop()   

if __name__ == "__main__":
   main()