1 from teamwork.math.Interval import *
2
3 from Tkinter import *
4 import Pmw
5
7 """ Megawidget containing a scale, confidence and an indicator.
8 """
9 confidenceValues = ['lo', 'med', 'hi']
10
11 - def __init__(self, parent = None, **kw):
12
13 optiondefs = (
14 ('color', 1, None),
15 ('confidence', 1, Pmw.INITOPT),
16 ('orient', 'vertical', Pmw.INITOPT),
17 ('labelmargin', 0, Pmw.INITOPT),
18 ('labelpos', 'w', Pmw.INITOPT),
19 ('text', '', Pmw.INITOPT),
20 ('showvalue', 0, self.showValue),
21 ('threshold', (50,), None),
22 ('value', None, None),
23 )
24 self.defineoptions(kw, optiondefs)
25
26
27 Pmw.MegaWidget.__init__(self, parent)
28
29
30 interior = self.interior()
31
32
33
34
35
36
37
38
39
40
41
42
43
44 self.group = self.createcomponent('Group', (), None,
45 Pmw.Group, interior,
46 tag_text=self['text'],
47 tag_font=('Helvetica',14,'bold'))
48 widget = self.group.component('tag')
49 self.activeFG = widget.cget('activeforeground')
50 self.disabledFG = widget.cget('disabledforeground')
51
52 if self['orient'] == 'vertical':
53
54
55 from_ = 100
56 to = 0
57 else:
58 from_ = 0
59 to = 100
60
61
62 self.scale = self.createcomponent('scale',
63 (), None, Scale,
64 self.group.interior(),
65 orient = self['orient'],
66
67
68 length = 200,
69 from_ = from_,
70 to = to)
71
72
73 if self['orient'] == 'vertical':
74 self.scale.pack(side=LEFT,fill=Y,expand=YES)
75 else:
76 self.scale.pack(side=TOP,fill=X,expand=YES)
77
78
79 self.buttonFrame = Frame(self.group.interior())
80
81 if self['confidence']:
82 self.radio = self.createcomponent('radio',(),None,
83 Pmw.OptionMenu,
84 self.buttonFrame,
85 menubutton_width=3,
86 labelpos='w',
87 label_text='Confidence:',
88 items=self.confidenceValues
89 )
90 self.radio.pack(side=LEFT,fill=Y,expand=YES)
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 else:
115 self.radio = None
116 val = self['value']
117 self.setter(val)
118
119 self.initialiseoptions()
120 self.buttonFrame.pack()
121 self.group.pack(side=TOP,fill=X,expand=YES)
122
124 """Configures the value visibility on the scale"""
125 self.scale.configure(showvalue=self['showvalue'])
126
141
143 mean = self.scale.get()
144 confidence = self.radio.getcurselection()
145 if confidence == 'lo':
146 span = 0.4
147 elif confidence == 'med':
148 span = 0.2
149 else:
150 span = 0.0
151 return Interval(mean-span,mean+span)
152
154 valueInt = self.scale.get()
155 bottom = float(self['scale_from'])
156 span = float(self['scale_to'])-bottom
157 percent = (float(valueInt)-bottom)/span
158 if self['color']:
159 newColor = '#%02x%02x00' % \
160 (int((1.0-percent)*255.),int(percent*255.))
161 else:
162 value = int((1.0-percent)*255.)
163 newColor = '#%02x%02x%02x' % (value,value,value)
164 self.scale.configure(troughcolor=newColor)
165
166
168 """Disables all editing widgets"""
169 widget = self.group.component('tag')
170 widget.configure(state=state)
171 self.scale.configure(state=state)
172 if state == NORMAL:
173 self.scale.configure(fg=self.activeFG)
174 else:
175 self.scale.configure(fg=self.disabledFG)
176 if self['confidence']:
177 self.radio.component('menubutton').configure(state=state)
178 if state == NORMAL:
179 self.radio.component('label').configure(fg=self.activeFG)
180 else:
181 self.radio.component('label').configure(fg=self.disabledFG)
182