Files
@ 71489bb71528
Branch filter:
Location: light9/light8/uihelpers.py - annotation
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 | 45b12307c695 71489bb71528 2ae11dc56b38 45b12307c695 71489bb71528 411de8b46aef 45b12307c695 45b12307c695 7adc65771676 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 7adc65771676 71489bb71528 7adc65771676 71489bb71528 7adc65771676 71489bb71528 7adc65771676 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 45b12307c695 e9d2e7754fd9 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef 411de8b46aef e9d2e7754fd9 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 e9d2e7754fd9 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 2ae11dc56b38 | """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()
|