| 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) |