Mercurial > code > home > repos > light9
diff light8/uihelpers.py @ 30:e9d2e7754fd9
sideways subs, new x/y buttons (which don't draw right, but they work)
author | drewp |
---|---|
date | Sun, 07 Jul 2002 10:48:38 +0000 |
parents | 219d6fcbc28d |
children | 411de8b46aef |
line wrap: on
line diff
--- a/light8/uihelpers.py Sun Jul 07 10:41:06 2002 +0000 +++ b/light8/uihelpers.py Sun Jul 07 10:48:38 2002 +0000 @@ -39,3 +39,46 @@ 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("<Enter>",lambda ev: self.setstate) + self.bind("<Leave>",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"