Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | # Tests for Pmw megawidgets |
2 | ||
3 | import Tkinter | |
4 | import Test | |
5 | import Pmw | |
6 | ||
7 | Test.initialise() | |
8 | ||
9 | class TestWidget(Pmw.MegaWidget): | |
10 | ||
11 | def __init__(self, parent = None, **kw): | |
12 | # Define the megawidget options. | |
13 | optiondefs = () | |
14 | self.defineoptions(kw, optiondefs) | |
15 | ||
16 | # Initialise the base class (after defining the options). | |
17 | Pmw.MegaWidget.__init__(self, parent) | |
18 | ||
19 | # Create the components. | |
20 | interior = self.interior() | |
21 | self._label = self.createcomponent('label', | |
22 | (), None, | |
23 | Tkinter.Label, (interior,), text = 'test') | |
24 | self._label.pack(side='left', padx=2) | |
25 | ||
26 | # Check keywords and initialise options. | |
27 | self.initialiseoptions(TestWidget) | |
28 | ||
29 | def addComponent(self, nickname): | |
30 | self.createcomponent(nickname, | |
31 | (), None, | |
32 | TestComponent, (self.interior(),), status = 'create') | |
33 | ||
34 | def addTestWidget(self, widget, option, value): | |
35 | w = self.createcomponent('test', | |
36 | (), None, | |
37 | widget, (self.interior(),)) | |
38 | apply(self.configure, (), {'test_' + option : value}) | |
39 | if w.__class__.__name__ not in ('Menu', 'Toplevel'): | |
40 | w.pack() | |
41 | if hasattr(widget, 'geometry'): | |
42 | w.geometry('+100+100') | |
43 | return str(w.cget(option)) | |
44 | ||
45 | def deleteTestWidget(self): | |
46 | w = self.component('test') | |
47 | if hasattr(widget, 'pack'): | |
48 | w.pack_forget() | |
49 | self.destroycomponent('test') | |
50 | ||
51 | def packComponent(self, nickname): | |
52 | self.component(nickname).pack() | |
53 | ||
54 | def getStatusList(self, nickname): | |
55 | return self.component(nickname)._statusList | |
56 | ||
57 | def componentOption(self, nickname, option): | |
58 | return self.component(nickname).cget(option) | |
59 | ||
60 | class TestComponent(Pmw.MegaWidget): | |
61 | ||
62 | def __init__(self, parent = None, **kw): | |
63 | # Define the megawidget options. | |
64 | optiondefs = ( | |
65 | ('status', '', self._status), | |
66 | ) | |
67 | self.defineoptions(kw, optiondefs) | |
68 | ||
69 | # Initialise the base class (after defining the options). | |
70 | Pmw.MegaWidget.__init__(self, parent) | |
71 | ||
72 | # Create the components. | |
73 | interior = self.interior() | |
74 | self._label = self.createcomponent('label', | |
75 | (), None, | |
76 | Tkinter.Label, (interior,), text = 'test') | |
77 | self._label.pack(side='left', padx=2) | |
78 | ||
79 | self._statusList = [] | |
80 | ||
81 | # Check keywords and initialise options. | |
82 | self.initialiseoptions() | |
83 | ||
84 | def action(self, info): | |
85 | self._statusList.append(info) | |
86 | ||
87 | def _status(self): | |
88 | self._statusList.append(self['status']) | |
89 | ||
90 | c = TestWidget | |
91 | tests = ( | |
92 | (c.pack, ()), | |
93 | (c.components, (), ['hull', 'label']), | |
94 | ||
95 | (c.addComponent, 'k0'), | |
96 | (c.getStatusList, 'k0', ['create']), | |
97 | (c.packComponent, 'k0'), | |
98 | ('k0_status', 'foo'), | |
99 | (c.getStatusList, 'k0', ['create', 'foo']), | |
100 | ||
101 | (c.addComponent, 'k1'), | |
102 | (c.packComponent, 'k1'), | |
103 | ('k1_status', 'bar'), | |
104 | (c.getStatusList, 'k1', ['create', 'bar']), | |
105 | ||
106 | (c.addComponent, 'k2'), | |
107 | (c.packComponent, 'k2'), | |
108 | ('k2_label_foreground', 'green'), | |
109 | ('hull_cursor', 'gumby'), | |
110 | ('k2_label_cursor', 'gumby'), | |
111 | (c.componentOption, ('k2', 'label_foreground'), 'green'), | |
112 | (c.componentOption, ('k2', 'label_cursor'), 'gumby'), | |
113 | ||
114 | (c.addComponent, 'k3'), | |
115 | (c.packComponent, 'k3'), | |
116 | ('k3_label_foreground', 'red'), | |
117 | ('hull_background', 'white'), | |
118 | ('k3_label_background', 'white'), | |
119 | ('hull_cursor', 'dot'), | |
120 | ('k3_label_cursor', 'dot'), | |
121 | (c.componentOption, ('k3', 'label_foreground'), 'red'), | |
122 | (c.componentOption, ('k3', 'label_background'), 'white'), | |
123 | (c.componentOption, ('k3', 'label_cursor'), 'dot'), | |
124 | ('label_background', 'white'), | |
125 | (c.destroycomponent, 'k0'), | |
126 | (c.destroycomponent, 'k1'), | |
127 | (c.destroycomponent, 'k2'), | |
128 | (c.destroycomponent, 'k3'), | |
129 | ) | |
130 | ||
131 | # Test each of the standard widgets as components. | |
132 | for widget in [Tkinter.Button, Tkinter.Checkbutton, Tkinter.Entry, Tkinter.Label, Tkinter.Listbox, \ | |
133 | Tkinter.Menu, Tkinter.Menubutton, Tkinter.Message, Tkinter.Radiobutton, Tkinter.Scale, Tkinter.Text]: | |
134 | tests = tests + ( | |
135 | (c.addTestWidget, (widget, 'foreground', 'blue'), 'blue'), | |
136 | (c.deleteTestWidget, ()) | |
137 | ) | |
138 | ||
139 | for widget in [Tkinter.Canvas, Tkinter.Frame, Tkinter.Scrollbar, Tkinter.Toplevel]: | |
140 | tests = tests + ( | |
141 | (c.addTestWidget, (widget, 'background', 'grey80'), 'grey80'), | |
142 | (c.deleteTestWidget, ()) | |
143 | ) | |
144 | ||
145 | # Test the logical fonts. | |
146 | for fontName in Pmw.logicalfontnames(): | |
147 | for sizeIncr in (-2, 0, 1, 2, 4, 8): | |
148 | font = Pmw.logicalfont(fontName, sizeIncr) | |
149 | tests = tests + ( | |
150 | ('label_text', 'Testing font\n' + fontName + ' ' + str(sizeIncr)), | |
151 | ('label_font', font), | |
152 | ) | |
153 | fontList = ( | |
154 | (('Helvetica', 0), {}), | |
155 | (('Times', 0), {}), | |
156 | (('Typewriter', 0), {}), | |
157 | (('Typewriter', 0), {'width' : 'condensed'}), | |
158 | (('Typewriter', -1), {'width' : 'condensed'}), | |
159 | (('Fixed', 0), {}), | |
160 | (('Fixed', 0), {'width' : 'condensed'}), | |
161 | (('Fixed', -1), {'width' : 'condensed'}), | |
162 | (('Helvetica', 2), {'slant' : 'italic'}), | |
163 | (('Helvetica', 0), {'size' : 18}), | |
164 | (('Helvetica', 0), {'weight' : 'bold'}), | |
165 | (('Helvetica', 12), {'weight' : 'bold', 'slant' : 'italic'}), | |
166 | (('Typewriter', 0), {'size' : 8, 'weight' : 'bold'}), | |
167 | (('Fixed', 0), {'size' : 8, 'weight' : 'bold'}), | |
168 | (('Times', 0), {'size' : 24, 'weight' : 'bold', 'slant' : 'italic'}), | |
169 | ) | |
170 | ||
171 | for args, dict in fontList: | |
172 | font = apply(Pmw.logicalfont, args, dict) | |
173 | tests = tests + ( | |
174 | ('label_text', 'Testing font\n' + str(args) + '\n' + str(dict)), | |
175 | ('label_font', font), | |
176 | ) | |
177 | ||
178 | testData = ((c, ((tests, {'label_text' : 'Testing Pmw base classes'}),)),) | |
179 | ||
180 | if __name__ == '__main__': | |
181 | Test.runTests(testData) |