annotate light8/uihelpers.py @ 62:2f2eb802e93d

stage shows levels now. aims have blue halo for easy recognition. stage shows levels now. aims have blue halo for easy recognition. old dummy config stored
author dmcc
date Tue, 09 Jul 2002 08:35:27 +0000
parents 2508c6b7a4e0
children 0bf7e664f913
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 """all the tiny tk helper functions"""
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 47
diff changeset
2
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
3 from __future__ import nested_scopes
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 from Tkinter import *
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 47
diff changeset
5 from Tix import *
34
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
6 from types import StringType
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
7
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 def make_frame(parent):
12
7adc65771676 big restructuring - moved lots of things (including most panels) to other files
drewp
parents: 0
diff changeset
9 f = Frame(parent, bd=0)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 f.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 return f
45b12307c695 Initial revision
drewp
parents:
diff changeset
12
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 def bindkeys(root,key, func):
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 root.bind(key, func)
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 for w in root.winfo_children():
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 w.bind(key, func)
45b12307c695 Initial revision
drewp
parents:
diff changeset
17
12
7adc65771676 big restructuring - moved lots of things (including most panels) to other files
drewp
parents: 0
diff changeset
18 def toplevelat(x,y,w=None,h=None):
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 47
diff changeset
19 tl = Toplevel()
12
7adc65771676 big restructuring - moved lots of things (including most panels) to other files
drewp
parents: 0
diff changeset
20 if w and h:
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 47
diff changeset
21 tl.wm_geometry("%dx%d+%d+%d" % (w,h,x,y))
12
7adc65771676 big restructuring - moved lots of things (including most panels) to other files
drewp
parents: 0
diff changeset
22 else:
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 47
diff changeset
23 tl.wm_geometry("+%d+%d" % (x,y))
12
7adc65771676 big restructuring - moved lots of things (including most panels) to other files
drewp
parents: 0
diff changeset
24 return tl
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
25
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 def toggle_slider(s):
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 if s.get() == 0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 s.set(100)
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 s.set(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
31
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 # for lambda callbacks
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 def printout(t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 print t
58
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
35
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
36 def printevent(ev):
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
37 for k in dir(ev):
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
38 if not k.startswith('__'):
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
39 print k,getattr(ev,k)
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
40 print ""
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
41
58
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
42 def eventtoparent(ev,sequence):
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
43 "passes an event to the parent"
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
44 evdict={}
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
45 for x in ['state', 'time', 'y', 'x', 'serial']:
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
46 evdict[x]=getattr(ev,x)
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
47 # evdict['button']=ev.num
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
48 par=ev.widget.winfo_parent()
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
49 if par!=".":
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
50 ev.widget.nametowidget(par).event_generate(sequence,**evdict)
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
51 #else the event made it all the way to the top, unhandled
a4d000f759b4 new event handling utils
drewp
parents: 52
diff changeset
52
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 def colorlabel(label):
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 """color a label based on its own text"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 txt=label['text'] or "0"
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 lev=float(txt)/100
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 low=(80,80,180)
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 high=(255,55,050)
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 out = [int(l+lev*(h-l)) for h,l in zip(high,low)]
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 col="#%02X%02X%02X" % tuple(out)
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 label.config(bg=col)
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
62
34
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
63 # TODO: get everyone to use this
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
64 def colorfade(low, high, percent):
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
65 '''not foolproof. make sure 0 < percent < 1'''
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
66 out = [int(l+percent*(h-l)) for h,l in zip(high,low)]
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
67 col="#%02X%02X%02X" % tuple(out)
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
68 return col
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
69
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
70 def colortotuple(anytkobj, colorname):
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
71 'pass any tk object and a color name, like "yellow"'
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
72 rgb = anytkobj.winfo_rgb(colorname)
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
73 return [v / 256 for v in rgb]
411de8b46aef the famous you-are-in-the-process-of-changing-this-light indicator.
dmcc
parents: 30
diff changeset
74
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
75 class Togglebutton(Button):
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
76 """works like a single radiobutton, but it's a button so the
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
77 label's on the button face, not to the side. the optional command
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
78 callback is called on button set, not on unset. takes a variable
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
79 just like a checkbutton"""
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
80 def __init__(self,parent,variable=None,command=None,downcolor='red',**kw):
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
81
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
82 self.oldcommand = command
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
83 Button.__init__(self,parent,command=self.invoke,**kw)
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
84
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
85 self._origbkg = self.cget('bg')
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
86 self.downcolor = downcolor
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
87
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
88 self._variable = variable
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
89 if self._variable:
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
90 self._variable.trace('w',self._varchanged)
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
91 self._setstate(self._variable.get())
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
92 else:
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
93 self._setstate(0)
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
94
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
95 self.bind("<Return>",self.invoke)
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
96 self.bind("<1>",self.invoke)
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
97 self.bind("<space>",self.invoke)
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
98
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
99 def _varchanged(self,*args):
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
100 self._setstate(self._variable.get())
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
101
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
102 def invoke(self,*ev):
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
103 if self._variable:
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
104 self._variable.set(not self.state)
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
105 else:
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
106 self._setstate(not self.state)
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
107
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
108 if self.oldcommand and self.state: # call command only when state goes to 1
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
109 self.oldcommand()
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
110 return "break"
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
111
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
112 def _setstate(self,newstate):
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
113 self.state = newstate
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
114 if newstate: # set
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
115 self.config(bg=self.downcolor,relief='sunken')
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
116 else: # unset
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
117 self.config(bg=self._origbkg,relief='raised')
30
e9d2e7754fd9 sideways subs, new x/y buttons (which don't draw right, but they work)
drewp
parents: 26
diff changeset
118 return "break"
47
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
119
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
120 if __name__=='__main__':
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
121 root=Tk()
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
122 root.tk_focusFollowsMouse()
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
123 iv=IntVar()
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
124 def cb():
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
125 print "cb!"
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
126 t = Togglebutton(root,text="testbutton",command=cb,variable=iv)
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
127 t.pack()
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
128 Entry(root,textvariable=iv).pack()
2ae11dc56b38 did a nice job with Togglebutton
drewp
parents: 34
diff changeset
129 root.mainloop()