1# Tests for basic Tkinter widgets. 2 3import Tkinter 4import Test 5 6Test.initialise() 7testData = () 8 9if Tkinter.TkVersion >= 8.0: 10 button_num = 31 11 frame_num = 16 12 menu_num = 20 13 menubutton_num = 32 14else: 15 button_num = 30 16 frame_num = 15 17 menu_num = 19 18 menubutton_num = 31 19 20c = Tkinter.Button 21tests = ( 22 (c.pack, ()), 23 (Test.num_options, (), button_num), 24 ('text', 'Hello World'), 25 ('background', 'lightsteelblue1'), 26 ('foreground', 'seagreen4'), 27 ('command', Test.callback), 28 (c.flash, ()), 29 (c.invoke, (), '1'), 30) 31testData = testData + ((c, ((tests, {}),)),) 32 33c = Tkinter.Canvas 34tests = ( 35 (c.pack, ()), 36 (Test.num_options, (), 27), 37 ('background', 'aliceblue'), 38 (c.create_oval, (100, 100, 200, 200), 39 {'fill' : 'lightsteelblue1', 'tags' : 'circle'}, 1), 40 (c.create_rectangle, (200, 100, 300, 200), 41 {'fill' : 'lightsteelblue2', 'tags' : 'square'}, 2), 42 (c.create_text, (0, 200), 43 {'text' : 'Hello, world', 'tags' : 'words', 'anchor' : 'w'}, 3), 44 (c.addtag_withtag, ('lightsteelblue1', 'circle')), 45 (c.bbox, ('circle', 'square'), (99, 99, 301, 201)), 46 (c.tag_bind, ('circle', '<1>', Test.callback)), 47 (c.tag_bind, 'circle', '<Button-1>'), 48 (c.tag_unbind, ('circle', '<1>')), 49 (c.canvasx, 100, 100.0), 50 (c.canvasy, 100, 100.0), 51 (c.coords, 'circle', [100.0, 100.0, 200.0, 200.0]), 52 (c.coords, ('circle', 0, 0, 300, 300), []), 53 (c.coords, 'circle', [0.0, 0.0, 300.0, 300.0]), 54 (c.find_withtag, 'lightsteelblue1', (1,)), 55 (c.focus, 'circle', ''), 56 (c.gettags, 'circle', ('circle', 'lightsteelblue1')), 57 (c.icursor, ('words', 7)), 58 (c.index, ('words', 'insert'), 7), 59 (c.insert, ('words', 'insert', 'cruel ')), 60 (c.itemconfigure, 'circle', {'fill': 'seagreen4'}), 61 (c.itemcget, ('circle', 'fill'), 'seagreen4'), 62 (c.lower, 'words'), 63 (c.move, ('square', -50, -50)), 64 (c.tkraise, ('words', 'circle')), 65 (c.scale, ('circle', 150, 150, 1.0, 0.5)), 66 (c.select_from, ('words', 0)), 67 (c.select_to, ('words', 'end')), 68 (c.delete, 'square'), 69 (c.type, 'circle', 'oval'), 70 (c.dtag, 'lightsteelblue1'), 71) 72testData = testData + ((c, ((tests, {}),)),) 73 74c = Tkinter.Checkbutton 75tests = ( 76 (c.pack, ()), 77 (Test.num_options, (), 36), 78 ('text', 'Hello World'), 79 ('background', 'lightsteelblue1'), 80 ('foreground', 'seagreen4'), 81 ('command', Test.callback), 82 (c.flash, ()), 83 (c.invoke, (), '1'), 84) 85testData = testData + ((c, ((tests, {}),)),) 86 87c = Tkinter.Entry 88tests = ( 89 (c.pack, ()), 90 (Test.num_options, (), 28), 91 ('background', 'lightsteelblue1'), 92 (c.insert, ('insert', 'Hello, Brian!')), 93 (c.delete, (7, 12)), 94 (c.icursor, 7), 95 (c.insert, ('insert', 'world')), 96 (c.get, (), 'Hello, world!'), 97 (c.index, 'insert', 12), 98 (c.selection_from, 7), 99 (c.selection_to, '12'), 100) 101testData = testData + ((c, ((tests, {}),)),) 102 103c = Tkinter.Frame 104tests = ( 105 (c.pack, ()), 106 (Test.num_options, (), frame_num), 107 ('background', 'lightsteelblue1'), 108 ('width', 300), 109 ('height', 50), 110 ('background', 'lightsteelblue1'), 111) 112testData = testData + ((c, ((tests, {}),)),) 113 114c = Tkinter.Label 115tests = ( 116 (c.pack, ()), 117 (Test.num_options, (), 25), 118 ('text', 'Hello World'), 119 ('background', 'lightsteelblue1'), 120 ('foreground', 'seagreen4'), 121 ('image', Test.earthris), 122) 123testData = testData + ((c, ((tests, {}),)),) 124 125c = Tkinter.Listbox 126tests = ( 127 (c.pack, ()), 128 (Test.num_options, (), 23), 129 ('background', 'lightsteelblue1'), 130 ('foreground', 'seagreen4'), 131 (c.insert, (0, 'ABC', 'DEF', 'GHI', 'XXXXXXXXXXXX')), 132 (c.activate, 1), 133 (c.select_set, (2, 3)), 134 (c.curselection, (), ('2', '3')), 135 (c.delete, 1), 136 (c.get, 1, 'GHI'), 137 (c.get, (0, 1), ('ABC', 'GHI')), 138 (c.index, 'end', 3), 139 (c.nearest, 1, 0), 140 (c.see, 1), 141 (c.size, (), 3), 142) 143testData = testData + ((c, ((tests, {}),)),) 144 145c = Tkinter.Menu 146tests = ( 147 (Test.num_options, (), menu_num), 148 ('background', 'lightsteelblue1'), 149 ('foreground', 'seagreen4'), 150 (c.add_command, (), 151 {'background': 'lightsteelblue2', 'label': 'Hello World'}), 152 (c.add_checkbutton, (), 153 {'background': 'lightsteelblue2', 'label': 'Charm'}), 154 (c.post, (100, 100)), 155 (c.activate, 1), 156 (c.entryconfigure, 'Hello World', {'background': 'aliceblue'}), 157 (c.entrycget, ('Hello World', 'background'), 'aliceblue'), 158 (c.index, 'end', 2), 159 ('tearoff', 0), 160 (c.index, 'end', 1), 161 (c.insert_radiobutton, 'Charm', 162 {'background': 'lightsteelblue2', 'label': 'Niceness', 163 'command': Test.callback}), 164 (c.invoke, 'Niceness', '1'), 165 (c.delete, 'Charm'), 166 (c.type, 'Hello World', 'command'), 167 (c.yposition, 'Hello World', 2), 168 (c.unpost, ()), 169) 170testData = testData + ((c, ((tests, {}),)),) 171 172c = Tkinter.Menubutton 173tests = ( 174 (c.pack, ()), 175 (Test.num_options, (), menubutton_num), 176 ('text', 'Hello World'), 177 ('background', 'lightsteelblue1'), 178 ('foreground', 'seagreen4'), 179) 180testData = testData + ((c, ((tests, {}),)),) 181 182c = Tkinter.Message 183tests = ( 184 (c.pack, ()), 185 (Test.num_options, (), 21), 186 ('text', 'Hello World'), 187 ('background', 'lightsteelblue1'), 188 ('foreground', 'seagreen4'), 189 ('text', 'Hello\nCruel Cruel World'), 190 ('borderwidth', 100), 191 ('justify', 'center'), 192 ('justify', 'right'), 193 ('justify', 'left'), 194) 195testData = testData + ((c, ((tests, {}),)),) 196 197c = Tkinter.Radiobutton 198tests = ( 199 (c.pack, ()), 200 (Test.num_options, (), 35), 201 ('text', 'Hello World'), 202 ('value', 'Foo Bar'), 203 ('variable', Test.stringvar), 204 ('background', 'lightsteelblue1'), 205 ('foreground', 'seagreen4'), 206 ('text', 'Hello\nCruel Cruel World'), 207 ('command', Test.callback), 208 (c.select, ()), 209 (Test.stringvar.get, (), 'Foo Bar'), 210 (c.flash, ()), 211 (c.invoke, (), '1'), 212 (c.deselect, ()), 213 (Test.stringvar.get, (), ''), 214) 215testData = testData + ((c, ((tests, {}),)),) 216 217c = Tkinter.Scale 218tests = ( 219 (c.pack, ()), 220 (Test.num_options, (), 33), 221 ('showvalue', 1), 222 ('orient', 'horizontal'), 223 ('from', 100.0), 224 ('to', 200.0), 225 ('variable', Test.floatvar), 226 ('background', 'lightsteelblue1'), 227 ('foreground', 'seagreen4'), 228 ('command', Test.callback1), 229 (c.set, 150.0), 230 (c.get, (), 150.0), 231 (c.get, 123, 'TypeError: too many arguments; expected 1, got 2'), 232) 233testData = testData + ((c, ((tests, {}),)),) 234 235c = Tkinter.Scrollbar 236tests = ( 237 (c.pack, (), {'fill': 'x'}), 238 (Test.num_options, (), 20), 239 ('orient', 'horizontal'), 240 (Test.set_geom, (300, 50)), 241 (c.set, (0.3, 0.7)), 242 ('background', 'lightsteelblue1'), 243 ('troughcolor', 'aliceblue'), 244 (c.get, (), (0.3, 0.7)), 245 (c.activate, 'slider'), 246 (c.set, (0.5, 0.9)), 247 (c.delta, (0, 0), 0), 248 (c.fraction, (0, 0), 0), 249) 250testData = testData + ((c, ((tests, {}),)),) 251 252c = Tkinter.Text 253tests = ( 254 (c.pack, ()), 255 (Test.num_options, (), 35), 256 ('background', 'lightsteelblue1'), 257 (c.insert, ('end', 'This little piggy is bold.', 'bold', '\n')), 258 (c.insert, ('end', 'This little piggy is in green.', 'green', '\n')), 259 (c.insert, ('end', 'This line is a mistake.\n')), 260 (c.insert, ('end', 'This little piggy is crossed out.', 'overstrike', '\n')), 261 (c.insert, ('end', 'This little piggy is raised.', 'raised', '\n')), 262 (c.insert, ('end', 'This little piggy is underlined.', 'underline', '\n')), 263 (c.tag_configure, 'bold', {'font': Test.font['variable']}), 264 (c.tag_configure, 'green', {'background': 'seagreen1'}), 265 (c.tag_configure, 'overstrike', {'overstrike': 1}), 266 (c.tag_configure, 'raised', 267 {'background': 'aliceblue', 'borderwidth': 2, 'relief': 'raised'}), 268 (c.tag_configure, 'underline', {'underline': 1}), 269 (c.compare, ('2.0', '<', 'end'), 1), 270 (c.delete, ('3.0', '4.0')), 271 (c.get, ('1.0', '1.4'), 'This'), 272 (c.index, 'end', '7.0'), 273 (c.mark_set, ('my_mark', '4.9')), 274 (c.mark_gravity, ('my_mark', 'right'), ''), 275 (c.mark_gravity, 'my_mark', 'right'), 276 (c.mark_names, (), ('my_mark', 'insert', 'current')), 277 (c.mark_unset, 'my_mark'), 278 (c.insert, ('end', '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n')), 279 (c.insert, ('end', 'This is the last line.')), 280 (c.scan_mark, (0, 20)), 281 (c.scan_dragto, (0, 0)), 282 (c.scan_dragto, (0, 20)), 283 (c.tag_add, ('green', '1.0', '1.4')), 284 (c.tag_cget, ('raised', 'background'), 'aliceblue'), 285 (c.tag_lower, 'green'), 286 (c.tag_names, (), 287 ('green', 'sel', 'bold', 'overstrike', 'raised', 'underline')), 288 (c.tag_nextrange, ('raised', '0.0'), ('4.0', '4.28')), 289 (c.tag_raise, 'green'), 290 (c.tag_ranges, 'green', ('1.0', '1.4', '2.0', '2.30')), 291 (c.tag_remove, ('green', '1.0', '1.4')), 292 (c.tag_ranges, 'green', ('2.0', '2.30')), 293 (c.tag_delete, 'green'), 294 (c.search, ('Gre.n', '0.0'), {'regexp': 1, 'nocase': 1}, '2.24'), 295 (c.search, ('Gre.n', '3.0', 'end'), {'regexp': 1, 'nocase': 1}, ''), 296 (c.see, 'end'), 297 (c.see, '0.0'), 298) 299testData = testData + ((c, ((tests, {}),)),) 300 301#============================================================================= 302 303# Grid command 304 305def _makeGridButtons(): 306 w = Test.currentWidget() 307 b1 = Tkinter.Button(w, text = 'Button 1') 308 b2 = Tkinter.Button(w, text = 'Button 2') 309 b3 = Tkinter.Button(w, text = 'Button 3') 310 b4 = Tkinter.Button(w, text = 'Button 4') 311 b5 = Tkinter.Button(w, text = 'Button 5') 312 b6 = Tkinter.Button(w, text = 'Button 6') 313 b7 = Tkinter.Button(w, text = 'Button 7') 314 b8 = Tkinter.Button(w, text = 'Button 8') 315 316 b1.grid(column=0, row=0) 317 b2.grid(column=1, row=0) 318 b3.grid(column=2, row=0, ipadx=50, ipady=50, padx=50, pady=50, sticky='nsew') 319 b4.grid(column=3, row=0) 320 b5.grid(column=0, row=1) 321 b6.grid(column=2, row=1, columnspan=2, rowspan=2, sticky='nsew') 322 b7.grid(column=0, row=2) 323 b8.grid(column=0, row=3, columnspan=4, padx=50, sticky='ew') 324 325def _checkGridSlaves(): 326 w = Test.currentWidget() 327 return len(w.grid_slaves()) 328 329def _checkGridInfo(): 330 w = Test.currentWidget() 331 b8 = w.grid_slaves(column=0, row=3)[0] 332 info = b8.grid_info() 333 if info['in'] == w: 334 rtn = {} 335 for key, value in info.items(): 336 if key != 'in': 337 rtn[key] = value 338 return rtn 339 return 'BAD' 340 341def _checkGridForget(): 342 w = Test.currentWidget() 343 b8 = w.grid_slaves(column=0, row=3)[0] 344 b8.grid_forget() 345 return w.grid_size() 346 347# The -pad grid option was added in Tk 4.2. 348# Could not do columnconfigure(0) before Tk 4.2. 349if Tkinter.TkVersion >= 4.2: 350 padTest = {'pad': 25} 351 colTest = {'minsize': 100, 'pad': 25, 'weight': 1} 352 rowTest = {'minsize': 100, 'pad': 0, 'weight': 1} 353else: 354 padTest = {'minsize': 100} 355 colTest = 'TclError: wrong # args: should be "grid columnconfigure master index ?-option value...?"' 356 rowTest = 'TclError: wrong # args: should be "grid rowconfigure master index ?-option value...?"' 357 358c = Tkinter.Frame 359tests = ( 360 (c.pack, (), {'fill': 'both', 'expand': 1}), 361 (_makeGridButtons, ()), 362 # (c.grid_bbox, (1, 2), (85, 268, 85, 34)), 363 (c.grid_columnconfigure, (0, 'minsize'), 0), 364 (c.grid_columnconfigure, (0, 'weight'), 0), 365 (c.grid_columnconfigure, 0, {'minsize': 100, 'weight': 1}), 366 (c.grid_columnconfigure, 0, padTest), 367 (c.grid_columnconfigure, 0, {}, colTest), 368 (c.grid_columnconfigure, (0, 'minsize'), 100), 369 (c.grid_columnconfigure, (0, 'weight'), 1), 370 (c.location, (200, 100), (2, 0)), 371 (c.grid_propagate, (), 1), 372 (c.grid_propagate, 0), 373 (c.grid_propagate, (), 0), 374 (c.grid_rowconfigure, (0, 'minsize'), 0), 375 (c.grid_rowconfigure, (0, 'weight'), 0), 376 (c.grid_rowconfigure, 0, {'minsize': 100, 'weight': 1}), 377 (c.grid_rowconfigure, 0, {}, rowTest), 378 (c.grid_size, (), (4, 4)), 379 (_checkGridSlaves, (), 8), 380 (_checkGridInfo, (), {}, {'column': '0', 'columnspan': '4', 381 'ipadx': '0', 'ipady': '0', 'padx': '50', 'pady': '0', 382 'row': '3', 'rowspan': '1', 'sticky': 'ew', 383 }), 384 (_checkGridForget, (), (4, 3)), 385 (_checkGridSlaves, (), 7), 386) 387 388testData = testData + ((c, ((tests, {}),)),) 389 390if __name__ == '__main__': 391 #Test.setverbose(1) 392 #Test.setdelay(1000) 393 Test.runTests(testData) 394