Files
@ 71489bb71528
Branch filter:
Location: light9/light8/uihelpers.py
71489bb71528
3.0 KiB
text/x-python
- Meet Fader. He is going to grow up and be a crossfader some day
- Meet Fader. He is going to grow up and be a crossfader some day
(tomarrow)
- Tkinter -> Tix so we can use ScrolledListBox which has a command
- Some improvements to Cue
- Cues need to specify their final values
- Cues are imported by subs. This should be fixed for style points.
- Some other cleanups
- Meet Fader. He is going to grow up and be a crossfader some day
(tomarrow)
- Tkinter -> Tix so we can use ScrolledListBox which has a command
- Some improvements to Cue
- Cues need to specify their final values
- Cues are imported by subs. This should be fixed for style points.
- Some other cleanups
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | """all the tiny tk helper functions"""
from __future__ import nested_scopes
from Tkinter import *
from Tix import *
from types import StringType
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)
# TODO: get everyone to use this
def colorfade(low, high, percent):
'''not foolproof. make sure 0 < percent < 1'''
out = [int(l+percent*(h-l)) for h,l in zip(high,low)]
col="#%02X%02X%02X" % tuple(out)
return col
def colortotuple(anytkobj, colorname):
'pass any tk object and a color name, like "yellow"'
rgb = anytkobj.winfo_rgb(colorname)
return [v / 256 for v in rgb]
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. the optional command
callback is called on button set, not on unset. takes a variable
just like a checkbutton"""
def __init__(self,parent,variable=None,command=None,**kw):
self.oldcommand = command
Button.__init__(self,parent,command=self.invoke,**kw)
self._origbkg = self.cget('bg')
self._variable = variable
if self._variable:
self._variable.trace('w',self._varchanged)
self._setstate(self._variable.get())
else:
self._setstate(0)
self.bind("<Return>",self.invoke)
self.bind("<1>",self.invoke)
self.bind("<space>",self.invoke)
def _varchanged(self,*args):
self._setstate(self._variable.get())
def invoke(self,*ev):
if self._variable:
self._variable.set(not self.state)
else:
self._setstate(not self.state)
if self.oldcommand and self.state: # call command only when state goes to 1
self.oldcommand()
return "break"
def _setstate(self,newstate):
self.state = newstate
if newstate: # set
self.config(bg='red',relief='sunken')
else: # unset
self.config(bg=self._origbkg,relief='raised')
return "break"
if __name__=='__main__':
root=Tk()
root.tk_focusFollowsMouse()
iv=IntVar()
def cb():
print "cb!"
t = Togglebutton(root,text="testbutton",command=cb,variable=iv)
t.pack()
Entry(root,textvariable=iv).pack()
root.mainloop()
|