comparison Widgets/FlyingFader.py @ 22:626aa2179630

some naming and defaults tweaks some naming and defaults tweaks interrupted fades now go to the new destination at the same rate they were traveling. not very cool
author drewp
date Sun, 07 Jul 2002 07:22:12 +0000
parents 6eafd86930b5
children 548d3aa2660f
comparison
equal deleted inserted replaced
21:dea1e1d6d439 22:626aa2179630
1 from Tkinter import * 1 from Tkinter import *
2 from time import time 2 from time import time
3 3
4 class FlyingFader(Frame): 4 class FlyingFader(Frame):
5 def __init__(self, master, variable, label, time=1.5, font=('Arial', 8), 5 def __init__(self, master, variable, label, fadedur=1.5, font=('Arial', 8),
6 **kw): 6 **kw):
7 Frame.__init__(self, master) 7 Frame.__init__(self, master)
8 self.name = label 8 self.name = label
9 self.variable = variable 9 self.variable = variable
10 self.fadelength = time 10 self.fadedur = fadedur
11 self.curfade = None 11 self.curfade = None
12 self.fadetimes = 0, 0 12 self.fadetimes = 0, 0
13 13
14 self.config({'bd':1, 'relief':'raised'}) 14 self.config({'bd':1, 'relief':'raised'})
15 scaleopts = {'variable' : variable, 'showvalue' : 0, 'from' : 100, 15 scaleopts = {'variable' : variable, 'showvalue' : 0, 'from' : 1.0,
16 'to' : 0, 'res' : 0.1, 'width' : 20, 'length' : 200} 16 'to' : 0, 'res' : 0.001, 'width' : 20, 'length' : 200}
17 scaleopts.update(kw) 17 scaleopts.update(kw)
18 18
19 self.scale = Scale(self, scaleopts) 19 self.scale = Scale(self, scaleopts)
20 self.vlabel = Label(self, text="0.0", font=font) 20 self.vlabel = Label(self, text="0.0", width=6, font=font)
21 self.label = Label(self, text=label, wraplength=40, font=font) 21 self.label = Label(self, text=label, wraplength=40, font=font)
22 22
23 self.oldtrough = self.scale['troughcolor'] 23 self.oldtrough = self.scale['troughcolor']
24 24
25 self.scale.pack(side=TOP, expand=1, fill=BOTH, anchor='c') 25 self.scale.pack(side=TOP, expand=1, fill=BOTH, anchor='c')
46 46
47 def mousefade(self, evt): 47 def mousefade(self, evt):
48 target = float(self.tk.call(self.scale, 'get', evt.x, evt.y)) 48 target = float(self.tk.call(self.scale, 'get', evt.x, evt.y))
49 self.newfade(target, evt) 49 self.newfade(target, evt)
50 50
51 def isfading(self):
52 return self.fadetimes[0] or self.fadetimes[1]
53
51 def newfade(self, newlevel, evt=None, length=None): 54 def newfade(self, newlevel, evt=None, length=None):
52 if length is None: 55 if length is None:
53 length = self.fadelength 56 length = self.fadedur
54 mult = 1 57 mult = 1
55 58
56 if evt.state & 8 and evt.state & 4: mult = 0.25 # both 59 if evt.state & 8 and evt.state & 4: mult = 0.25 # both
57 elif evt.state & 8: mult = 0.5 # alt 60 elif evt.state & 8: mult = 0.5 # alt
58 elif evt.state & 4: mult = 2 # control 61 elif evt.state & 4: mult = 2 # control
59 62
60 now = time() 63 now = time()
61 self.fadetimes = (now, now + (mult * length)) 64 if not self.isfading():
62 self.curfade = (self.variable.get(), newlevel) 65 self.fadetimes = (now, now + (mult * length))
66 self.curfade = (self.variable.get(), newlevel)
67 else:
68 # already fading
69 t1,t2=self.fadetimes
70 v1,v2=self.curfade
71 rate = abs((v2-v1)/(t2-t1))
72
73 vnow=self.variable.get()
74 newdist=abs(newlevel-vnow)
75 newdur=newdist/rate
76
77 self.fadetimes = (now,now+newdur)
78 self.curfade=(vnow,newlevel)
79
80
63 81
64 self.scale['troughcolor'] = 'red' 82 self.scale['troughcolor'] = 'red'
65 83
66 self.gofade() 84 self.gofade()
67 85
76 return 94 return
77 percent = (now - start) / (end - start) 95 percent = (now - start) / (end - start)
78 newvalue = (percent * (lend - lstart)) + lstart 96 newvalue = (percent * (lend - lstart)) + lstart
79 self.variable.set(newvalue) 97 self.variable.set(newvalue)
80 colorfade(self.scale, percent) 98 colorfade(self.scale, percent)
81 self.after(10, self.gofade) 99 self.after(30, self.gofade)
82 100
83 def updatelabel(self, *args): 101 def updatelabel(self, *args):
84 self.vlabel['text'] = "%.3f" % self.variable.get() 102 self.vlabel['text'] = "%.3f" % self.variable.get()
85 if self.fadetimes[1] == 0: # no fade 103 if self.fadetimes[1] == 0: # no fade
86 self.vlabel['fg'] = 'black' 104 self.vlabel['fg'] = 'black'