| 1 | # Tests for basic Tkinter widgets. |
| 2 | |
| 3 | import Tkinter |
| 4 | import Test |
| 5 | |
| 6 | Test.initialise() |
| 7 | testData = () |
| 8 | |
| 9 | if Tkinter.TkVersion >= 8.0: |
| 10 | button_num = 31 |
| 11 | frame_num = 16 |
| 12 | menu_num = 20 |
| 13 | menubutton_num = 32 |
| 14 | else: |
| 15 | button_num = 30 |
| 16 | frame_num = 15 |
| 17 | menu_num = 19 |
| 18 | menubutton_num = 31 |
| 19 | |
| 20 | c = Tkinter.Button |
| 21 | tests = ( |
| 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 | ) |
| 31 | testData = testData + ((c, ((tests, {}),)),) |
| 32 | |
| 33 | c = Tkinter.Canvas |
| 34 | tests = ( |
| 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 | ) |
| 72 | testData = testData + ((c, ((tests, {}),)),) |
| 73 | |
| 74 | c = Tkinter.Checkbutton |
| 75 | tests = ( |
| 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 | ) |
| 85 | testData = testData + ((c, ((tests, {}),)),) |
| 86 | |
| 87 | c = Tkinter.Entry |
| 88 | tests = ( |
| 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 | ) |
| 101 | testData = testData + ((c, ((tests, {}),)),) |
| 102 | |
| 103 | c = Tkinter.Frame |
| 104 | tests = ( |
| 105 | (c.pack, ()), |
| 106 | (Test.num_options, (), frame_num), |
| 107 | ('background', 'lightsteelblue1'), |
| 108 | ('width', 300), |
| 109 | ('height', 50), |
| 110 | ('background', 'lightsteelblue1'), |
| 111 | ) |
| 112 | testData = testData + ((c, ((tests, {}),)),) |
| 113 | |
| 114 | c = Tkinter.Label |
| 115 | tests = ( |
| 116 | (c.pack, ()), |
| 117 | (Test.num_options, (), 25), |
| 118 | ('text', 'Hello World'), |
| 119 | ('background', 'lightsteelblue1'), |
| 120 | ('foreground', 'seagreen4'), |
| 121 | ('image', Test.earthris), |
| 122 | ) |
| 123 | testData = testData + ((c, ((tests, {}),)),) |
| 124 | |
| 125 | c = Tkinter.Listbox |
| 126 | tests = ( |
| 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 | ) |
| 143 | testData = testData + ((c, ((tests, {}),)),) |
| 144 | |
| 145 | c = Tkinter.Menu |
| 146 | tests = ( |
| 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 | ) |
| 170 | testData = testData + ((c, ((tests, {}),)),) |
| 171 | |
| 172 | c = Tkinter.Menubutton |
| 173 | tests = ( |
| 174 | (c.pack, ()), |
| 175 | (Test.num_options, (), menubutton_num), |
| 176 | ('text', 'Hello World'), |
| 177 | ('background', 'lightsteelblue1'), |
| 178 | ('foreground', 'seagreen4'), |
| 179 | ) |
| 180 | testData = testData + ((c, ((tests, {}),)),) |
| 181 | |
| 182 | c = Tkinter.Message |
| 183 | tests = ( |
| 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 | ) |
| 195 | testData = testData + ((c, ((tests, {}),)),) |
| 196 | |
| 197 | c = Tkinter.Radiobutton |
| 198 | tests = ( |
| 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 | ) |
| 215 | testData = testData + ((c, ((tests, {}),)),) |
| 216 | |
| 217 | c = Tkinter.Scale |
| 218 | tests = ( |
| 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 | ) |
| 233 | testData = testData + ((c, ((tests, {}),)),) |
| 234 | |
| 235 | c = Tkinter.Scrollbar |
| 236 | tests = ( |
| 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 | ) |
| 250 | testData = testData + ((c, ((tests, {}),)),) |
| 251 | |
| 252 | c = Tkinter.Text |
| 253 | tests = ( |
| 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 | ) |
| 299 | testData = testData + ((c, ((tests, {}),)),) |
| 300 | |
| 301 | #============================================================================= |
| 302 | |
| 303 | # Grid command |
| 304 | |
| 305 | def _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 | |
| 325 | def _checkGridSlaves(): |
| 326 | w = Test.currentWidget() |
| 327 | return len(w.grid_slaves()) |
| 328 | |
| 329 | def _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 | |
| 341 | def _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. |
| 349 | if Tkinter.TkVersion >= 4.2: |
| 350 | padTest = {'pad': 25} |
| 351 | colTest = {'minsize': 100, 'pad': 25, 'weight': 1} |
| 352 | rowTest = {'minsize': 100, 'pad': 0, 'weight': 1} |
| 353 | else: |
| 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 | |
| 358 | c = Tkinter.Frame |
| 359 | tests = ( |
| 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 | |
| 388 | testData = testData + ((c, ((tests, {}),)),) |
| 389 | |
| 390 | if __name__ == '__main__': |
| 391 | #Test.setverbose(1) |
| 392 | #Test.setdelay(1000) |
| 393 | Test.runTests(testData) |