blob: 4af4b7356e1ce3bcb3af13aa03f8a3a8f9a8cee0 [file] [log] [blame]
Georg Brandlac6060c2008-05-17 18:44:45 +00001:mod:`tkinter` --- Python interface to Tcl/Tk
Georg Brandl116aa622007-08-15 14:28:22 +00002=============================================
3
Georg Brandlac6060c2008-05-17 18:44:45 +00004.. module:: tkinter
Georg Brandl116aa622007-08-15 14:28:22 +00005 :synopsis: Interface to Tcl/Tk for graphical user interfaces
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Georg Brandl116aa622007-08-15 14:28:22 +00007.. moduleauthor:: Guido van Rossum <guido@Python.org>
8
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04009**Source code:** :source:`Lib/tkinter/__init__.py`
10
11--------------
Georg Brandl116aa622007-08-15 14:28:22 +000012
Georg Brandlac6060c2008-05-17 18:44:45 +000013The :mod:`tkinter` package ("Tk interface") is the standard Python interface to
14the Tk GUI toolkit. Both Tk and :mod:`tkinter` are available on most Unix
Georg Brandlc575c902008-09-13 17:46:05 +000015platforms, as well as on Windows systems. (Tk itself is not part of Python; it
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030016is maintained at ActiveState.)
17
18Running ``python -m tkinter`` from the command line should open a window
19demonstrating a simple Tk interface, letting you know that :mod:`tkinter` is
20properly installed on your system, and also showing what version of Tcl/Tk is
21installed, so you can read the Tcl/Tk documentation specific to that version.
Georg Brandl116aa622007-08-15 14:28:22 +000022
Georg Brandl116aa622007-08-15 14:28:22 +000023.. seealso::
24
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030025 Tkinter documentation:
26
Zachary Ware08863992014-03-18 09:19:18 -050027 `Python Tkinter Resources <https://wiki.python.org/moin/TkInter>`_
Georg Brandl116aa622007-08-15 14:28:22 +000028 The Python Tkinter Topic Guide provides a great deal of information on using Tk
29 from Python and links to other sources of information on Tk.
30
Andrew Svetlove708a8a2012-07-26 17:02:57 +030031 `TKDocs <http://www.tkdocs.com/>`_
32 Extensive tutorial plus friendlier widget pages for some of the widgets.
33
Serhiy Storchaka6dff0202016-05-07 10:49:07 +030034 `Tkinter reference: a GUI for Python <https://infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html>`_
Andrew Svetlove708a8a2012-07-26 17:02:57 +030035 On-line reference material.
36
37 `Tkinter docs from effbot <http://effbot.org/tkinterbook/>`_
38 Online reference for tkinter supported by effbot.org.
39
Sanyam Khurana338cd832018-01-20 05:55:37 +053040 `Programming Python <http://learning-python.com/about-pp4e.html>`_
Andrew Svetlove708a8a2012-07-26 17:02:57 +030041 Book by Mark Lutz, has excellent coverage of Tkinter.
42
Sanyam Khurana1b4587a2017-12-06 22:09:33 +053043 `Modern Tkinter for Busy Python Developers <https://www.amazon.com/Modern-Tkinter-Python-Developers-ebook/dp/B0071QDNLO/>`_
Andrew Svetlove708a8a2012-07-26 17:02:57 +030044 Book by Mark Rozerman about building attractive and modern graphical user interfaces with Python and Tkinter.
45
Georg Brandl5d941342016-02-26 19:37:12 +010046 `Python and Tkinter Programming <https://www.manning.com/books/python-and-tkinter-programming>`_
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030047 Book by John Grayson (ISBN 1-884777-81-3).
48
49 Tcl/Tk documentation:
50
51 `Tk commands <https://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm>`_
52 Most commands are available as :mod:`tkinter` or :mod:`tkinter.ttk` classes.
53 Change '8.6' to match the version of your Tcl/Tk installation.
54
55 `Tcl/Tk recent man pages <https://www.tcl.tk/doc/>`_
56 Recent Tcl/Tk manuals on www.tcl.tk.
57
58 `ActiveState Tcl Home Page <http://tcl.activestate.com/>`_
59 The Tk/Tcl development is largely taking place at ActiveState.
60
61 `Tcl and the Tk Toolkit <https://www.amazon.com/exec/obidos/ASIN/020163337X>`_
62 Book by John Ousterhout, the inventor of Tcl.
63
64 `Practical Programming in Tcl and Tk <http://www.beedub.com/book/>`_
65 Brent Welch's encyclopedic book.
Georg Brandl116aa622007-08-15 14:28:22 +000066
67
68Tkinter Modules
69---------------
70
Ezio Melotti1a263ad2010-03-14 09:51:37 +000071Most of the time, :mod:`tkinter` is all you really need, but a number of
72additional modules are available as well. The Tk interface is located in a
Georg Brandl116aa622007-08-15 14:28:22 +000073binary module named :mod:`_tkinter`. This module contains the low-level
74interface to Tk, and should never be used directly by application programmers.
75It is usually a shared library (or DLL), but might in some cases be statically
76linked with the Python interpreter.
77
Georg Brandlac6060c2008-05-17 18:44:45 +000078In addition to the Tk interface module, :mod:`tkinter` includes a number of
Georg Brandl48310cd2009-01-03 21:18:54 +000079Python modules, :mod:`tkinter.constants` being one of the most important.
Georg Brandlac6060c2008-05-17 18:44:45 +000080Importing :mod:`tkinter` will automatically import :mod:`tkinter.constants`,
81so, usually, to use Tkinter all you need is a simple import statement::
Georg Brandl116aa622007-08-15 14:28:22 +000082
Georg Brandlac6060c2008-05-17 18:44:45 +000083 import tkinter
Georg Brandl116aa622007-08-15 14:28:22 +000084
85Or, more often::
86
Georg Brandlac6060c2008-05-17 18:44:45 +000087 from tkinter import *
Georg Brandl116aa622007-08-15 14:28:22 +000088
89
90.. class:: Tk(screenName=None, baseName=None, className='Tk', useTk=1)
91
92 The :class:`Tk` class is instantiated without arguments. This creates a toplevel
93 widget of Tk which usually is the main window of an application. Each instance
94 has its own associated Tcl interpreter.
95
Christian Heimes5b5e81c2007-12-31 16:14:33 +000096 .. FIXME: The following keyword arguments are currently recognized:
Georg Brandl116aa622007-08-15 14:28:22 +000097
Georg Brandl116aa622007-08-15 14:28:22 +000098
99.. function:: Tcl(screenName=None, baseName=None, className='Tk', useTk=0)
100
101 The :func:`Tcl` function is a factory function which creates an object much like
102 that created by the :class:`Tk` class, except that it does not initialize the Tk
103 subsystem. This is most often useful when driving the Tcl interpreter in an
104 environment where one doesn't want to create extraneous toplevel windows, or
105 where one cannot (such as Unix/Linux systems without an X server). An object
106 created by the :func:`Tcl` object can have a Toplevel window created (and the Tk
107 subsystem initialized) by calling its :meth:`loadtk` method.
108
Georg Brandl116aa622007-08-15 14:28:22 +0000109
110Other modules that provide Tk support include:
111
Georg Brandlac6060c2008-05-17 18:44:45 +0000112:mod:`tkinter.scrolledtext`
Georg Brandl116aa622007-08-15 14:28:22 +0000113 Text widget with a vertical scroll bar built in.
114
Georg Brandlac6060c2008-05-17 18:44:45 +0000115:mod:`tkinter.colorchooser`
Georg Brandl116aa622007-08-15 14:28:22 +0000116 Dialog to let the user choose a color.
117
Georg Brandlac6060c2008-05-17 18:44:45 +0000118:mod:`tkinter.commondialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000119 Base class for the dialogs defined in the other modules listed here.
120
Georg Brandlac6060c2008-05-17 18:44:45 +0000121:mod:`tkinter.filedialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000122 Common dialogs to allow the user to specify a file to open or save.
123
Georg Brandlac6060c2008-05-17 18:44:45 +0000124:mod:`tkinter.font`
Georg Brandl116aa622007-08-15 14:28:22 +0000125 Utilities to help work with fonts.
126
Georg Brandlac6060c2008-05-17 18:44:45 +0000127:mod:`tkinter.messagebox`
Georg Brandl116aa622007-08-15 14:28:22 +0000128 Access to standard Tk dialog boxes.
129
Georg Brandlac6060c2008-05-17 18:44:45 +0000130:mod:`tkinter.simpledialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000131 Basic dialogs and convenience functions.
132
Georg Brandlac6060c2008-05-17 18:44:45 +0000133:mod:`tkinter.dnd`
Georg Brandl48310cd2009-01-03 21:18:54 +0000134 Drag-and-drop support for :mod:`tkinter`. This is experimental and should
Georg Brandlac6060c2008-05-17 18:44:45 +0000135 become deprecated when it is replaced with the Tk DND.
Georg Brandl116aa622007-08-15 14:28:22 +0000136
Georg Brandl23d11d32008-09-21 07:50:52 +0000137:mod:`turtle`
Georg Brandl116aa622007-08-15 14:28:22 +0000138 Turtle graphics in a Tk window.
139
140
141Tkinter Life Preserver
142----------------------
143
144.. sectionauthor:: Matt Conway
145
146
147This section is not designed to be an exhaustive tutorial on either Tk or
148Tkinter. Rather, it is intended as a stop gap, providing some introductory
149orientation on the system.
150
Georg Brandl116aa622007-08-15 14:28:22 +0000151Credits:
152
Georg Brandl116aa622007-08-15 14:28:22 +0000153* Tk was written by John Ousterhout while at Berkeley.
154
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000155* Tkinter was written by Steen Lumholt and Guido van Rossum.
156
Georg Brandl116aa622007-08-15 14:28:22 +0000157* This Life Preserver was written by Matt Conway at the University of Virginia.
158
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000159* The HTML rendering, and some liberal editing, was produced from a FrameMaker
Georg Brandl116aa622007-08-15 14:28:22 +0000160 version by Ken Manheimer.
161
162* Fredrik Lundh elaborated and revised the class interface descriptions, to get
163 them current with Tk 4.2.
164
165* Mike Clarkson converted the documentation to LaTeX, and compiled the User
166 Interface chapter of the reference manual.
167
168
169How To Use This Section
170^^^^^^^^^^^^^^^^^^^^^^^
171
172This section is designed in two parts: the first half (roughly) covers
173background material, while the second half can be taken to the keyboard as a
174handy reference.
175
176When trying to answer questions of the form "how do I do blah", it is often best
Julien Palardae342cf2017-12-05 06:05:33 +0100177to find out how to do "blah" in straight Tk, and then convert this back into the
Georg Brandlac6060c2008-05-17 18:44:45 +0000178corresponding :mod:`tkinter` call. Python programmers can often guess at the
Georg Brandl116aa622007-08-15 14:28:22 +0000179correct Python command by looking at the Tk documentation. This means that in
180order to use Tkinter, you will have to know a little bit about Tk. This document
181can't fulfill that role, so the best we can do is point you to the best
182documentation that exists. Here are some hints:
183
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000184* The authors strongly suggest getting a copy of the Tk man pages.
185 Specifically, the man pages in the ``manN`` directory are most useful.
186 The ``man3`` man pages describe the C interface to the Tk library and thus
187 are not especially helpful for script writers.
Georg Brandl116aa622007-08-15 14:28:22 +0000188
189* Addison-Wesley publishes a book called Tcl and the Tk Toolkit by John
190 Ousterhout (ISBN 0-201-63337-X) which is a good introduction to Tcl and Tk for
191 the novice. The book is not exhaustive, and for many details it defers to the
192 man pages.
193
Georg Brandl48310cd2009-01-03 21:18:54 +0000194* :file:`tkinter/__init__.py` is a last resort for most, but can be a good
Georg Brandlac6060c2008-05-17 18:44:45 +0000195 place to go when nothing else makes sense.
Georg Brandl116aa622007-08-15 14:28:22 +0000196
197
Georg Brandl116aa622007-08-15 14:28:22 +0000198A Simple Hello World Program
199^^^^^^^^^^^^^^^^^^^^^^^^^^^^
200
Georg Brandl116aa622007-08-15 14:28:22 +0000201::
202
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700203 import tkinter as tk
Georg Brandl116aa622007-08-15 14:28:22 +0000204
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700205 class Application(tk.Frame):
206 def __init__(self, master=None):
Berker Peksag3093bf12016-07-14 07:32:43 +0300207 super().__init__(master)
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700208 self.pack()
Berker Peksag3093bf12016-07-14 07:32:43 +0300209 self.create_widgets()
Georg Brandl116aa622007-08-15 14:28:22 +0000210
Berker Peksag3093bf12016-07-14 07:32:43 +0300211 def create_widgets(self):
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700212 self.hi_there = tk.Button(self)
213 self.hi_there["text"] = "Hello World\n(click me)"
214 self.hi_there["command"] = self.say_hi
215 self.hi_there.pack(side="top")
Georg Brandl116aa622007-08-15 14:28:22 +0000216
Berker Peksag3093bf12016-07-14 07:32:43 +0300217 self.quit = tk.Button(self, text="QUIT", fg="red",
Serhiy Storchakadba90392016-05-10 12:01:23 +0300218 command=root.destroy)
Berker Peksag3093bf12016-07-14 07:32:43 +0300219 self.quit.pack(side="bottom")
Georg Brandl116aa622007-08-15 14:28:22 +0000220
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700221 def say_hi(self):
222 print("hi there, everyone!")
Georg Brandl116aa622007-08-15 14:28:22 +0000223
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700224 root = tk.Tk()
225 app = Application(master=root)
226 app.mainloop()
Georg Brandl116aa622007-08-15 14:28:22 +0000227
228
229A (Very) Quick Look at Tcl/Tk
230-----------------------------
231
232The class hierarchy looks complicated, but in actual practice, application
233programmers almost always refer to the classes at the very bottom of the
234hierarchy.
235
Georg Brandl116aa622007-08-15 14:28:22 +0000236Notes:
237
238* These classes are provided for the purposes of organizing certain functions
239 under one namespace. They aren't meant to be instantiated independently.
240
241* The :class:`Tk` class is meant to be instantiated only once in an application.
242 Application programmers need not instantiate one explicitly, the system creates
243 one whenever any of the other classes are instantiated.
244
245* The :class:`Widget` class is not meant to be instantiated, it is meant only
246 for subclassing to make "real" widgets (in C++, this is called an 'abstract
247 class').
248
249To make use of this reference material, there will be times when you will need
250to know how to read short passages of Tk and how to identify the various parts
251of a Tk command. (See section :ref:`tkinter-basic-mapping` for the
Georg Brandlac6060c2008-05-17 18:44:45 +0000252:mod:`tkinter` equivalents of what's below.)
Georg Brandl116aa622007-08-15 14:28:22 +0000253
254Tk scripts are Tcl programs. Like all Tcl programs, Tk scripts are just lists
255of tokens separated by spaces. A Tk widget is just its *class*, the *options*
256that help configure it, and the *actions* that make it do useful things.
257
258To make a widget in Tk, the command is always of the form::
259
260 classCommand newPathname options
261
262*classCommand*
263 denotes which kind of widget to make (a button, a label, a menu...)
264
Serhiy Storchaka913876d2018-10-28 13:41:26 +0200265.. index:: single: . (dot); in Tkinter
266
Georg Brandl116aa622007-08-15 14:28:22 +0000267*newPathname*
268 is the new name for this widget. All names in Tk must be unique. To help
269 enforce this, widgets in Tk are named with *pathnames*, just like files in a
270 file system. The top level widget, the *root*, is called ``.`` (period) and
271 children are delimited by more periods. For example,
272 ``.myApp.controlPanel.okButton`` might be the name of a widget.
273
274*options*
275 configure the widget's appearance and in some cases, its behavior. The options
276 come in the form of a list of flags and values. Flags are preceded by a '-',
277 like Unix shell command flags, and values are put in quotes if they are more
278 than one word.
279
280For example::
281
282 button .fred -fg red -text "hi there"
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000283 ^ ^ \______________________/
Georg Brandl116aa622007-08-15 14:28:22 +0000284 | | |
285 class new options
286 command widget (-opt val -opt val ...)
287
288Once created, the pathname to the widget becomes a new command. This new
289*widget command* is the programmer's handle for getting the new widget to
290perform some *action*. In C, you'd express this as someAction(fred,
291someOptions), in C++, you would express this as fred.someAction(someOptions),
292and in Tk, you say::
293
Georg Brandl48310cd2009-01-03 21:18:54 +0000294 .fred someAction someOptions
Georg Brandl116aa622007-08-15 14:28:22 +0000295
296Note that the object name, ``.fred``, starts with a dot.
297
298As you'd expect, the legal values for *someAction* will depend on the widget's
299class: ``.fred disable`` works if fred is a button (fred gets greyed out), but
300does not work if fred is a label (disabling of labels is not supported in Tk).
301
302The legal values of *someOptions* is action dependent. Some actions, like
303``disable``, require no arguments, others, like a text-entry box's ``delete``
304command, would need arguments to specify what range of text to delete.
305
306
307.. _tkinter-basic-mapping:
308
309Mapping Basic Tk into Tkinter
310-----------------------------
311
312Class commands in Tk correspond to class constructors in Tkinter. ::
313
314 button .fred =====> fred = Button()
315
316The master of an object is implicit in the new name given to it at creation
317time. In Tkinter, masters are specified explicitly. ::
318
319 button .panel.fred =====> fred = Button(panel)
320
321The configuration options in Tk are given in lists of hyphened tags followed by
322values. In Tkinter, options are specified as keyword-arguments in the instance
323constructor, and keyword-args for configure calls or as instance indices, in
324dictionary style, for established instances. See section
325:ref:`tkinter-setting-options` on setting options. ::
326
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000327 button .fred -fg red =====> fred = Button(panel, fg="red")
Georg Brandl116aa622007-08-15 14:28:22 +0000328 .fred configure -fg red =====> fred["fg"] = red
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000329 OR ==> fred.config(fg="red")
Georg Brandl116aa622007-08-15 14:28:22 +0000330
331In Tk, to perform an action on a widget, use the widget name as a command, and
332follow it with an action name, possibly with arguments (options). In Tkinter,
333you call methods on the class instance to invoke actions on the widget. The
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000334actions (methods) that a given widget can perform are listed in
335:file:`tkinter/__init__.py`. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000336
337 .fred invoke =====> fred.invoke()
338
339To give a widget to the packer (geometry manager), you call pack with optional
340arguments. In Tkinter, the Pack class holds all this functionality, and the
341various forms of the pack command are implemented as methods. All widgets in
Georg Brandlac6060c2008-05-17 18:44:45 +0000342:mod:`tkinter` are subclassed from the Packer, and so inherit all the packing
Georg Brandl48310cd2009-01-03 21:18:54 +0000343methods. See the :mod:`tkinter.tix` module documentation for additional
Georg Brandlac6060c2008-05-17 18:44:45 +0000344information on the Form geometry manager. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000345
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000346 pack .fred -side left =====> fred.pack(side="left")
Georg Brandl116aa622007-08-15 14:28:22 +0000347
348
349How Tk and Tkinter are Related
350------------------------------
351
Georg Brandl116aa622007-08-15 14:28:22 +0000352From the top down:
353
354Your App Here (Python)
Georg Brandlac6060c2008-05-17 18:44:45 +0000355 A Python application makes a :mod:`tkinter` call.
Georg Brandl116aa622007-08-15 14:28:22 +0000356
Georg Brandlac6060c2008-05-17 18:44:45 +0000357tkinter (Python Package)
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000358 This call (say, for example, creating a button widget), is implemented in
359 the :mod:`tkinter` package, which is written in Python. This Python
360 function will parse the commands and the arguments and convert them into a
361 form that makes them look as if they had come from a Tk script instead of
362 a Python script.
Georg Brandl116aa622007-08-15 14:28:22 +0000363
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000364_tkinter (C)
Georg Brandl116aa622007-08-15 14:28:22 +0000365 These commands and their arguments will be passed to a C function in the
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000366 :mod:`_tkinter` - note the underscore - extension module.
Georg Brandl116aa622007-08-15 14:28:22 +0000367
368Tk Widgets (C and Tcl)
369 This C function is able to make calls into other C modules, including the C
370 functions that make up the Tk library. Tk is implemented in C and some Tcl.
371 The Tcl part of the Tk widgets is used to bind certain default behaviors to
Georg Brandlac6060c2008-05-17 18:44:45 +0000372 widgets, and is executed once at the point where the Python :mod:`tkinter`
373 package is imported. (The user never sees this stage).
Georg Brandl116aa622007-08-15 14:28:22 +0000374
375Tk (C)
376 The Tk part of the Tk Widgets implement the final mapping to ...
377
378Xlib (C)
379 the Xlib library to draw graphics on the screen.
380
381
382Handy Reference
383---------------
384
385
386.. _tkinter-setting-options:
387
388Setting Options
389^^^^^^^^^^^^^^^
390
391Options control things like the color and border width of a widget. Options can
392be set in three ways:
393
394At object creation time, using keyword arguments
395 ::
396
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000397 fred = Button(self, fg="red", bg="blue")
Georg Brandl116aa622007-08-15 14:28:22 +0000398
399After object creation, treating the option name like a dictionary index
400 ::
401
402 fred["fg"] = "red"
403 fred["bg"] = "blue"
404
405Use the config() method to update multiple attrs subsequent to object creation
406 ::
407
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000408 fred.config(fg="red", bg="blue")
Georg Brandl116aa622007-08-15 14:28:22 +0000409
410For a complete explanation of a given option and its behavior, see the Tk man
411pages for the widget in question.
412
413Note that the man pages list "STANDARD OPTIONS" and "WIDGET SPECIFIC OPTIONS"
414for each widget. The former is a list of options that are common to many
415widgets, the latter are the options that are idiosyncratic to that particular
416widget. The Standard Options are documented on the :manpage:`options(3)` man
417page.
418
419No distinction between standard and widget-specific options is made in this
420document. Some options don't apply to some kinds of widgets. Whether a given
421widget responds to a particular option depends on the class of the widget;
422buttons have a ``command`` option, labels do not.
423
424The options supported by a given widget are listed in that widget's man page, or
425can be queried at runtime by calling the :meth:`config` method without
426arguments, or by calling the :meth:`keys` method on that widget. The return
427value of these calls is a dictionary whose key is the name of the option as a
428string (for example, ``'relief'``) and whose values are 5-tuples.
429
430Some options, like ``bg`` are synonyms for common options with long names
431(``bg`` is shorthand for "background"). Passing the ``config()`` method the name
432of a shorthand option will return a 2-tuple, not 5-tuple. The 2-tuple passed
433back will contain the name of the synonym and the "real" option (such as
434``('bg', 'background')``).
435
436+-------+---------------------------------+--------------+
437| Index | Meaning | Example |
438+=======+=================================+==============+
439| 0 | option name | ``'relief'`` |
440+-------+---------------------------------+--------------+
441| 1 | option name for database lookup | ``'relief'`` |
442+-------+---------------------------------+--------------+
443| 2 | option class for database | ``'Relief'`` |
444| | lookup | |
445+-------+---------------------------------+--------------+
446| 3 | default value | ``'raised'`` |
447+-------+---------------------------------+--------------+
448| 4 | current value | ``'groove'`` |
449+-------+---------------------------------+--------------+
450
451Example::
452
Collin Winterc79461b2007-09-01 23:34:30 +0000453 >>> print(fred.config())
Serhiy Storchakaf47036c2013-12-24 11:04:36 +0200454 {'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}
Georg Brandl116aa622007-08-15 14:28:22 +0000455
456Of course, the dictionary printed will include all the options available and
457their values. This is meant only as an example.
458
459
460The Packer
461^^^^^^^^^^
462
463.. index:: single: packing (widgets)
464
Georg Brandl116aa622007-08-15 14:28:22 +0000465The packer is one of Tk's geometry-management mechanisms. Geometry managers
466are used to specify the relative positioning of the positioning of widgets
467within their container - their mutual *master*. In contrast to the more
468cumbersome *placer* (which is used less commonly, and we do not cover here), the
469packer takes qualitative relationship specification - *above*, *to the left of*,
470*filling*, etc - and works everything out to determine the exact placement
471coordinates for you.
472
Georg Brandl116aa622007-08-15 14:28:22 +0000473The size of any *master* widget is determined by the size of the "slave widgets"
474inside. The packer is used to control where slave widgets appear inside the
475master into which they are packed. You can pack widgets into frames, and frames
476into other frames, in order to achieve the kind of layout you desire.
477Additionally, the arrangement is dynamically adjusted to accommodate incremental
478changes to the configuration, once it is packed.
479
480Note that widgets do not appear until they have had their geometry specified
481with a geometry manager. It's a common early mistake to leave out the geometry
482specification, and then be surprised when the widget is created but nothing
483appears. A widget will appear only after it has had, for example, the packer's
484:meth:`pack` method applied to it.
485
486The pack() method can be called with keyword-option/value pairs that control
487where the widget is to appear within its container, and how it is to behave when
488the main application window is resized. Here are some examples::
489
490 fred.pack() # defaults to side = "top"
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000491 fred.pack(side="left")
492 fred.pack(expand=1)
Georg Brandl116aa622007-08-15 14:28:22 +0000493
494
495Packer Options
496^^^^^^^^^^^^^^
497
498For more extensive information on the packer and the options that it can take,
499see the man pages and page 183 of John Ousterhout's book.
500
Georg Brandl48310cd2009-01-03 21:18:54 +0000501anchor
Georg Brandl116aa622007-08-15 14:28:22 +0000502 Anchor type. Denotes where the packer is to place each slave in its parcel.
503
504expand
505 Boolean, ``0`` or ``1``.
506
507fill
508 Legal values: ``'x'``, ``'y'``, ``'both'``, ``'none'``.
509
510ipadx and ipady
511 A distance - designating internal padding on each side of the slave widget.
512
513padx and pady
514 A distance - designating external padding on each side of the slave widget.
515
516side
517 Legal values are: ``'left'``, ``'right'``, ``'top'``, ``'bottom'``.
518
519
520Coupling Widget Variables
521^^^^^^^^^^^^^^^^^^^^^^^^^
522
523The current-value setting of some widgets (like text entry widgets) can be
524connected directly to application variables by using special options. These
525options are ``variable``, ``textvariable``, ``onvalue``, ``offvalue``, and
526``value``. This connection works both ways: if the variable changes for any
527reason, the widget it's connected to will be updated to reflect the new value.
528
Georg Brandlac6060c2008-05-17 18:44:45 +0000529Unfortunately, in the current implementation of :mod:`tkinter` it is not
Georg Brandl116aa622007-08-15 14:28:22 +0000530possible to hand over an arbitrary Python variable to a widget through a
531``variable`` or ``textvariable`` option. The only kinds of variables for which
532this works are variables that are subclassed from a class called Variable,
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000533defined in :mod:`tkinter`.
Georg Brandl116aa622007-08-15 14:28:22 +0000534
535There are many useful subclasses of Variable already defined:
536:class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and
537:class:`BooleanVar`. To read the current value of such a variable, call the
Georg Brandl502d9a52009-07-26 15:02:41 +0000538:meth:`get` method on it, and to change its value you call the :meth:`!set`
Georg Brandl116aa622007-08-15 14:28:22 +0000539method. If you follow this protocol, the widget will always track the value of
540the variable, with no further intervention on your part.
541
542For example::
543
544 class App(Frame):
545 def __init__(self, master=None):
Berker Peksag3093bf12016-07-14 07:32:43 +0300546 super().__init__(master)
Georg Brandl116aa622007-08-15 14:28:22 +0000547 self.pack()
548
549 self.entrythingy = Entry()
550 self.entrythingy.pack()
551
552 # here is the application variable
553 self.contents = StringVar()
554 # set it to some value
555 self.contents.set("this is a variable")
556 # tell the entry widget to watch this variable
557 self.entrythingy["textvariable"] = self.contents
558
559 # and here we get a callback when the user hits return.
560 # we will have the program print out the value of the
561 # application variable when the user hits return
562 self.entrythingy.bind('<Key-Return>',
563 self.print_contents)
564
565 def print_contents(self, event):
Collin Winterc79461b2007-09-01 23:34:30 +0000566 print("hi. contents of entry is now ---->",
567 self.contents.get())
Georg Brandl116aa622007-08-15 14:28:22 +0000568
569
570The Window Manager
571^^^^^^^^^^^^^^^^^^
572
573.. index:: single: window manager (widgets)
574
Georg Brandl116aa622007-08-15 14:28:22 +0000575In Tk, there is a utility command, ``wm``, for interacting with the window
576manager. Options to the ``wm`` command allow you to control things like titles,
Georg Brandlac6060c2008-05-17 18:44:45 +0000577placement, icon bitmaps, and the like. In :mod:`tkinter`, these commands have
Georg Brandl116aa622007-08-15 14:28:22 +0000578been implemented as methods on the :class:`Wm` class. Toplevel widgets are
579subclassed from the :class:`Wm` class, and so can call the :class:`Wm` methods
580directly.
581
582To get at the toplevel window that contains a given widget, you can often just
583refer to the widget's master. Of course if the widget has been packed inside of
584a frame, the master won't represent a toplevel window. To get at the toplevel
585window that contains an arbitrary widget, you can call the :meth:`_root` method.
586This method begins with an underscore to denote the fact that this function is
587part of the implementation, and not an interface to Tk functionality.
588
Georg Brandl116aa622007-08-15 14:28:22 +0000589Here are some examples of typical usage::
590
Berker Peksag3093bf12016-07-14 07:32:43 +0300591 import tkinter as tk
Georg Brandl116aa622007-08-15 14:28:22 +0000592
Berker Peksag3093bf12016-07-14 07:32:43 +0300593 class App(tk.Frame):
594 def __init__(self, master=None):
595 super().__init__(master)
596 self.pack()
Georg Brandl116aa622007-08-15 14:28:22 +0000597
598 # create the application
599 myapp = App()
600
601 #
602 # here are method calls to the window manager class
603 #
604 myapp.master.title("My Do-Nothing Application")
605 myapp.master.maxsize(1000, 400)
606
607 # start the program
608 myapp.mainloop()
609
610
611Tk Option Data Types
612^^^^^^^^^^^^^^^^^^^^
613
614.. index:: single: Tk Option Data Types
615
Georg Brandl116aa622007-08-15 14:28:22 +0000616anchor
617 Legal values are points of the compass: ``"n"``, ``"ne"``, ``"e"``, ``"se"``,
618 ``"s"``, ``"sw"``, ``"w"``, ``"nw"``, and also ``"center"``.
619
620bitmap
621 There are eight built-in, named bitmaps: ``'error'``, ``'gray25'``,
622 ``'gray50'``, ``'hourglass'``, ``'info'``, ``'questhead'``, ``'question'``,
623 ``'warning'``. To specify an X bitmap filename, give the full path to the file,
624 preceded with an ``@``, as in ``"@/usr/contrib/bitmap/gumby.bit"``.
625
626boolean
Serhiy Storchakaa4d170d2013-12-23 18:20:51 +0200627 You can pass integers 0 or 1 or the strings ``"yes"`` or ``"no"``.
Georg Brandl116aa622007-08-15 14:28:22 +0000628
629callback
630 This is any Python function that takes no arguments. For example::
631
632 def print_it():
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000633 print("hi there")
Georg Brandl116aa622007-08-15 14:28:22 +0000634 fred["command"] = print_it
635
636color
637 Colors can be given as the names of X colors in the rgb.txt file, or as strings
638 representing RGB values in 4 bit: ``"#RGB"``, 8 bit: ``"#RRGGBB"``, 12 bit"
639 ``"#RRRGGGBBB"``, or 16 bit ``"#RRRRGGGGBBBB"`` ranges, where R,G,B here
640 represent any legal hex digit. See page 160 of Ousterhout's book for details.
641
642cursor
643 The standard X cursor names from :file:`cursorfont.h` can be used, without the
644 ``XC_`` prefix. For example to get a hand cursor (:const:`XC_hand2`), use the
645 string ``"hand2"``. You can also specify a bitmap and mask file of your own.
646 See page 179 of Ousterhout's book.
647
648distance
649 Screen distances can be specified in either pixels or absolute distances.
650 Pixels are given as numbers and absolute distances as strings, with the trailing
651 character denoting units: ``c`` for centimetres, ``i`` for inches, ``m`` for
652 millimetres, ``p`` for printer's points. For example, 3.5 inches is expressed
653 as ``"3.5i"``.
654
655font
656 Tk uses a list font name format, such as ``{courier 10 bold}``. Font sizes with
657 positive numbers are measured in points; sizes with negative numbers are
658 measured in pixels.
659
660geometry
661 This is a string of the form ``widthxheight``, where width and height are
662 measured in pixels for most widgets (in characters for widgets displaying text).
663 For example: ``fred["geometry"] = "200x100"``.
664
665justify
666 Legal values are the strings: ``"left"``, ``"center"``, ``"right"``, and
667 ``"fill"``.
668
669region
670 This is a string with four space-delimited elements, each of which is a legal
671 distance (see above). For example: ``"2 3 4 5"`` and ``"3i 2i 4.5i 2i"`` and
672 ``"3c 2c 4c 10.43c"`` are all legal regions.
673
674relief
675 Determines what the border style of a widget will be. Legal values are:
676 ``"raised"``, ``"sunken"``, ``"flat"``, ``"groove"``, and ``"ridge"``.
677
678scrollcommand
Georg Brandl502d9a52009-07-26 15:02:41 +0000679 This is almost always the :meth:`!set` method of some scrollbar widget, but can
Georg Brandl59b44722010-12-30 22:12:40 +0000680 be any widget method that takes a single argument.
Georg Brandl116aa622007-08-15 14:28:22 +0000681
682wrap:
683 Must be one of: ``"none"``, ``"char"``, or ``"word"``.
684
685
686Bindings and Events
687^^^^^^^^^^^^^^^^^^^
688
689.. index::
690 single: bind (widgets)
691 single: events (widgets)
692
Georg Brandl116aa622007-08-15 14:28:22 +0000693The bind method from the widget command allows you to watch for certain events
694and to have a callback function trigger when that event type occurs. The form
695of the bind method is::
696
697 def bind(self, sequence, func, add=''):
698
699where:
700
701sequence
702 is a string that denotes the target kind of event. (See the bind man page and
703 page 201 of John Ousterhout's book for details).
704
705func
706 is a Python function, taking one argument, to be invoked when the event occurs.
707 An Event instance will be passed as the argument. (Functions deployed this way
708 are commonly known as *callbacks*.)
709
710add
711 is optional, either ``''`` or ``'+'``. Passing an empty string denotes that
712 this binding is to replace any other bindings that this event is associated
713 with. Passing a ``'+'`` means that this function is to be added to the list
714 of functions bound to this event type.
715
716For example::
717
Berker Peksag3093bf12016-07-14 07:32:43 +0300718 def turn_red(self, event):
Georg Brandl116aa622007-08-15 14:28:22 +0000719 event.widget["activeforeground"] = "red"
720
Berker Peksag3093bf12016-07-14 07:32:43 +0300721 self.button.bind("<Enter>", self.turn_red)
Georg Brandl116aa622007-08-15 14:28:22 +0000722
723Notice how the widget field of the event is being accessed in the
Berker Peksag3093bf12016-07-14 07:32:43 +0300724``turn_red()`` callback. This field contains the widget that caught the X
Georg Brandl116aa622007-08-15 14:28:22 +0000725event. The following table lists the other event fields you can access, and how
726they are denoted in Tk, which can be useful when referring to the Tk man pages.
Georg Brandl116aa622007-08-15 14:28:22 +0000727
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000728+----+---------------------+----+---------------------+
729| Tk | Tkinter Event Field | Tk | Tkinter Event Field |
730+====+=====================+====+=====================+
731| %f | focus | %A | char |
732+----+---------------------+----+---------------------+
733| %h | height | %E | send_event |
734+----+---------------------+----+---------------------+
735| %k | keycode | %K | keysym |
736+----+---------------------+----+---------------------+
737| %s | state | %N | keysym_num |
738+----+---------------------+----+---------------------+
739| %t | time | %T | type |
740+----+---------------------+----+---------------------+
741| %w | width | %W | widget |
742+----+---------------------+----+---------------------+
743| %x | x | %X | x_root |
744+----+---------------------+----+---------------------+
745| %y | y | %Y | y_root |
746+----+---------------------+----+---------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000747
748
749The index Parameter
750^^^^^^^^^^^^^^^^^^^
751
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000752A number of widgets require "index" parameters to be passed. These are used to
Georg Brandl116aa622007-08-15 14:28:22 +0000753point at a specific place in a Text widget, or to particular characters in an
754Entry widget, or to particular menu items in a Menu widget.
755
Georg Brandl116aa622007-08-15 14:28:22 +0000756Entry widget indexes (index, view index, etc.)
757 Entry widgets have options that refer to character positions in the text being
Georg Brandlac6060c2008-05-17 18:44:45 +0000758 displayed. You can use these :mod:`tkinter` functions to access these special
Georg Brandl116aa622007-08-15 14:28:22 +0000759 points in text widgets:
760
Georg Brandl116aa622007-08-15 14:28:22 +0000761Text widget indexes
762 The index notation for Text widgets is very rich and is best described in the Tk
763 man pages.
764
765Menu indexes (menu.invoke(), menu.entryconfig(), etc.)
766 Some options and methods for menus manipulate specific menu entries. Anytime a
767 menu index is needed for an option or a parameter, you may pass in:
768
769 * an integer which refers to the numeric position of the entry in the widget,
770 counted from the top, starting with 0;
771
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000772 * the string ``"active"``, which refers to the menu position that is currently
Georg Brandl116aa622007-08-15 14:28:22 +0000773 under the cursor;
774
775 * the string ``"last"`` which refers to the last menu item;
776
777 * An integer preceded by ``@``, as in ``@6``, where the integer is interpreted
778 as a y pixel coordinate in the menu's coordinate system;
779
780 * the string ``"none"``, which indicates no menu entry at all, most often used
781 with menu.activate() to deactivate all entries, and finally,
782
783 * a text string that is pattern matched against the label of the menu entry, as
784 scanned from the top of the menu to the bottom. Note that this index type is
785 considered after all the others, which means that matches for menu items
786 labelled ``last``, ``active``, or ``none`` may be interpreted as the above
787 literals, instead.
788
789
790Images
791^^^^^^
792
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300793Images of different formats can be created through the corresponding subclass
794of :class:`tkinter.Image`:
Georg Brandl116aa622007-08-15 14:28:22 +0000795
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300796* :class:`BitmapImage` for images in XBM format.
Georg Brandl116aa622007-08-15 14:28:22 +0000797
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300798* :class:`PhotoImage` for images in PGM, PPM, GIF and PNG formats. The latter
799 is supported starting with Tk 8.6.
Georg Brandl116aa622007-08-15 14:28:22 +0000800
801Either type of image is created through either the ``file`` or the ``data``
802option (other options are available as well).
803
804The image object can then be used wherever an ``image`` option is supported by
805some widget (e.g. labels, buttons, menus). In these cases, Tk will not keep a
806reference to the image. When the last Python reference to the image object is
807deleted, the image data is deleted as well, and Tk will display an empty box
808wherever the image was used.
Terry Jan Reedyd9865632015-05-17 14:49:26 -0400809
Andrés Delfinob81ca282018-04-21 09:17:26 -0300810.. seealso::
811
812 The `Pillow <http://python-pillow.org/>`_ package adds support for
813 formats such as BMP, JPEG, TIFF, and WebP, among others.
Terry Jan Reedyd9865632015-05-17 14:49:26 -0400814
815.. _tkinter-file-handlers:
816
817File Handlers
818-------------
819
820Tk allows you to register and unregister a callback function which will be
821called from the Tk mainloop when I/O is possible on a file descriptor.
822Only one handler may be registered per file descriptor. Example code::
823
824 import tkinter
825 widget = tkinter.Tk()
826 mask = tkinter.READABLE | tkinter.WRITABLE
827 widget.tk.createfilehandler(file, mask, callback)
828 ...
829 widget.tk.deletefilehandler(file)
830
831This feature is not available on Windows.
832
833Since you don't know how many bytes are available for reading, you may not
834want to use the :class:`~io.BufferedIOBase` or :class:`~io.TextIOBase`
835:meth:`~io.BufferedIOBase.read` or :meth:`~io.IOBase.readline` methods,
836since these will insist on reading a predefined number of bytes.
837For sockets, the :meth:`~socket.socket.recv` or
838:meth:`~socket.socket.recvfrom` methods will work fine; for other files,
839use raw reads or ``os.read(file.fileno(), maxbytecount)``.
840
841
842.. method:: Widget.tk.createfilehandler(file, mask, func)
843
844 Registers the file handler callback function *func*. The *file* argument
845 may either be an object with a :meth:`~io.IOBase.fileno` method (such as
846 a file or socket object), or an integer file descriptor. The *mask*
847 argument is an ORed combination of any of the three constants below.
848 The callback is called as follows::
849
850 callback(file, mask)
851
852
853.. method:: Widget.tk.deletefilehandler(file)
854
855 Unregisters a file handler.
856
857
858.. data:: READABLE
859 WRITABLE
860 EXCEPTION
861
862 Constants used in the *mask* arguments.