"""all the tiny tk helper functions""" from Tkinter import * def make_frame(parent): f = Frame(parent, bd=0) f.pack(side='left') return f def bindkeys(root,key, func): root.bind(key, func) for w in root.winfo_children(): w.bind(key, func) def toplevelat(x,y,w=None,h=None): tl=Toplevel() if w and h: tl.wm_geometry("%dx%d+%d+%d"%(w,h,x,y)) else: tl.wm_geometry("+%d+%d"%(x,y)) return tl def toggle_slider(s): if s.get() == 0: s.set(100) else: s.set(0) # for lambda callbacks def printout(t): print t def colorlabel(label): """color a label based on its own text""" txt=label['text'] or "0" lev=float(txt)/100 low=(80,80,180) high=(255,55,050) out = [int(l+lev*(h-l)) for h,l in zip(high,low)] col="#%02X%02X%02X" % tuple(out) label.config(bg=col) class Togglebutton(Button): """works like a single radiobutton, but it's a button so the label's on the button face, not to the side""" def __init__(self,parent,**kw): if kw['variable']: self.variable = kw['variable'] self.variable.trace('w',self.varchanged) del kw['variable'] else: self.variable=None self.oldcommand = kw.get('command',None) kw['command'] = self.invoke Button.__init__(self,parent,**kw) self.origbkg = self.cget('bg') self.state=0 if self.variable: self.state = self.variable.get() self.setstate(self.state) self.bind("",lambda ev: self.setstate) self.bind("",lambda ev: self.setstate) def varchanged(self,*args): self.setstate(self.variable.get()) def invoke(self): self.setstate(not self.state) if self.oldcommand: self.oldcommand() def setstate(self,newstate): self.variable.set(newstate) if newstate: # set self.tk.call('tkButtonDown',self) self.config(bg='green') else: # unset self.tk.call('tkButtonUp',self) self.config(bg=self.origbkg) return "break"