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()