annotate Widgets/FlyingFader.py @ 15:c76b62eccdec

put **kw back in, they now go to the scale and can override the defaults. put **kw back in, they now go to the scale and can override the defaults. for our purposes, we probably want to edit the defaults so we don't have them in every call.
author dmcc
date Sun, 07 Jul 2002 06:18:40 +0000
parents c65119b66b00
children 053889940418
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
1 from Tkinter import *
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
2 from time import time
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
3
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 class FlyingFader(Frame):
15
c76b62eccdec put **kw back in, they now go to the scale and can override the defaults.
dmcc
parents: 11
diff changeset
5 def __init__(self, master, variable, label, time=1.5, font=('Arial', 8),
c76b62eccdec put **kw back in, they now go to the scale and can override the defaults.
dmcc
parents: 11
diff changeset
6 **kw):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 Frame.__init__(self, master)
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 self.name = label
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 self.variable = variable
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
10 self.fadelength = time
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
11 self.curfade = None
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
12 self.fadetimes = 0, 0
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
13
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 self.config({'bd':1, 'relief':'raised'})
15
c76b62eccdec put **kw back in, they now go to the scale and can override the defaults.
dmcc
parents: 11
diff changeset
15 scaleopts = {'variable' : variable, 'showvalue' : 0, 'from' : 100,
c76b62eccdec put **kw back in, they now go to the scale and can override the defaults.
dmcc
parents: 11
diff changeset
16 'to' : 0, 'res' : 0.1, 'width' : 20, 'length' : 200}
c76b62eccdec put **kw back in, they now go to the scale and can override the defaults.
dmcc
parents: 11
diff changeset
17 scaleopts.update(kw)
c76b62eccdec put **kw back in, they now go to the scale and can override the defaults.
dmcc
parents: 11
diff changeset
18
c76b62eccdec put **kw back in, they now go to the scale and can override the defaults.
dmcc
parents: 11
diff changeset
19 self.scale = Scale(self, scaleopts)
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
20 self.vlabel = Label(self, text="0.0", font=font)
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
21 self.label = Label(self, text=label, wraplength=40, font=font)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 self.oldtrough = self.scale['troughcolor']
45b12307c695 Initial revision
drewp
parents:
diff changeset
24
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
25 self.scale.pack(side=TOP, expand=1, fill=BOTH, anchor='c')
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
26 self.vlabel.pack(side=BOTTOM, expand=0, fill=X)
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
27 self.label.pack(side=BOTTOM, expand=0, fill=X)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
28
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 for k in range(1, 10):
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 self.scale.bind("<Key-%d>" % k,
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
31 lambda evt, k=k: self.newfade(k * 10, evt))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
32
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
33 self.scale.bind("<Key-0>", lambda evt: self.newfade(100, evt))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 self.scale.bind("<grave>", lambda evt: self.newfade(0, evt))
45b12307c695 Initial revision
drewp
parents:
diff changeset
35
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.scale.bind("<1>", self.cancelfade)
11
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
37 self.scale.bind("<2>", self.cancelfade)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 self.scale.bind("<3>", self.mousefade)
45b12307c695 Initial revision
drewp
parents:
diff changeset
39
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
40 self.variable.trace('w', self.updatelabel)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
41
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 def cancelfade(self, evt):
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
43 self.fadetimes = 0, 0
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
44 self.curfade = 0, self.variable.get()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 self.scale['troughcolor'] = self.oldtrough
45b12307c695 Initial revision
drewp
parents:
diff changeset
46
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 def mousefade(self, evt):
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 target = float(self.tk.call(self.scale, 'get', evt.x, evt.y))
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 self.newfade(target, evt)
45b12307c695 Initial revision
drewp
parents:
diff changeset
50
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
51 def newfade(self, newlevel, evt=None, length=None):
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
52 if length is None:
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
53 length = self.fadelength
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
54 mult = 1
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
55
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 if evt.state & 8 and evt.state & 4: mult = 0.25 # both
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 elif evt.state & 8: mult = 0.5 # alt
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 elif evt.state & 4: mult = 2 # control
45b12307c695 Initial revision
drewp
parents:
diff changeset
59
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
60 now = time()
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
61 self.fadetimes = (now, now + (mult * length))
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
62 self.curfade = (self.variable.get(), newlevel)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
63
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
64 self.scale['troughcolor'] = 'red'
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
65
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 self.gofade()
45b12307c695 Initial revision
drewp
parents:
diff changeset
67
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 def gofade(self):
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
69 now = time()
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
70 start, end = self.fadetimes
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
71 lstart, lend = self.curfade
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
72 if now > end:
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
73 self.fadetimes = 0, 0
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
74 self.variable.set(lend)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 self.scale['troughcolor'] = self.oldtrough
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 return
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
77 percent = (now - start) / (end - start)
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
78 newvalue = (percent * (lend - lstart)) + lstart
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
79 self.variable.set(newvalue)
11
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
80 colorfade(self.scale, percent)
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
81 self.after(10, self.gofade)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
82
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 def updatelabel(self, *args):
9
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
84 self.vlabel['text'] = "%.1f" % self.variable.get()
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
85 if self.fadetimes[1] == 0: # no fade
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
86 self.vlabel['fg'] = 'black'
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
87 elif self.curfade[1] > self.curfade[0]:
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
88 self.vlabel['fg'] = 'red'
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
89 else:
342f7d1c7561 The FlyingFader will accept keyboard values and fade to them over 1.5
dmcc
parents: 0
diff changeset
90 self.vlabel['fg'] = 'blue'
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
91
11
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
92 def get(self):
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
93 return self.scale.get()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
94
11
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
95 def set(self, val):
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
96 self.scale.set(val)
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
97
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
98
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
99 def colorfade(scale, lev):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 low = (255, 255, 255)
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 high = (0, 0, 0)
11
c65119b66b00 - no more kw args -- they didn't do anything. use configure to change
dmcc
parents: 9
diff changeset
102 out = [int(l+lev*(h-l)) for h, l in zip(high,low)]
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 col="#%02X%02X%02X" % tuple(out)
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 scale.config(troughcolor=col)
45b12307c695 Initial revision
drewp
parents:
diff changeset
105
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 if __name__ == '__main__':
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 root = Tk()
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 root.tk_focusFollowsMouse()
45b12307c695 Initial revision
drewp
parents:
diff changeset
109
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 FlyingFader(root, variable=DoubleVar(), label="suck").pack(side=LEFT,
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 FlyingFader(root, variable=DoubleVar(), label="moof").pack(side=LEFT,
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 FlyingFader(root, variable=DoubleVar(), label="zarf").pack(side=LEFT,
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
116 FlyingFader(root, variable=DoubleVar(),
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 label="long name goes here. got it?").pack(side=LEFT, expand=1,
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
119
45b12307c695 Initial revision
drewp
parents:
diff changeset
120 root.mainloop()