1:mod:`tkinter` --- Python interface to Tcl/Tk
2=============================================
3
4.. module:: tkinter
5   :synopsis: Interface to Tcl/Tk for graphical user interfaces
6
7.. moduleauthor:: Guido van Rossum <guido@Python.org>
8
9**Source code:** :source:`Lib/tkinter/__init__.py`
10
11--------------
12
13The :mod:`tkinter` package ("Tk interface") is the standard Python interface to
14the Tcl/Tk GUI toolkit.  Both Tk and :mod:`tkinter` are available on most Unix
15platforms, including macOS, as well as on Windows systems.
16
17Running ``python -m tkinter`` from the command line should open a window
18demonstrating a simple Tk interface, letting you know that :mod:`tkinter` is
19properly installed on your system, and also showing what version of Tcl/Tk is
20installed, so you can read the Tcl/Tk documentation specific to that version.
21
22Tkinter supports a range of Tcl/Tk versions, built either with or
23without thread support. The official Python binary release bundles Tcl/Tk 8.6
24threaded. See the source code for the :mod:`_tkinter` module
25for more information about supported versions.
26
27Tkinter is not a thin wrapper, but adds a fair amount of its own logic to
28make the experience more pythonic. This documentation will concentrate on these
29additions and changes, and refer to the official Tcl/Tk documentation for
30details that are unchanged.
31
32.. note::
33
34   Tcl/Tk 8.5 (2007) introduced a modern set of themed user interface components
35   along with a new API to use them. Both old and new APIs are still available.
36   Most documentation you will find online still uses the old API and
37   can be woefully outdated.
38
39.. seealso::
40
41   * `TkDocs <http://tkdocs.com/>`_
42      Extensive tutorial on creating user interfaces with Tkinter.  Explains key concepts,
43      and illustrates recommended approaches using the modern API.
44
45   * `Tkinter 8.5 reference: a GUI for Python <https://www.tkdocs.com/shipman/>`_
46      Reference documentation for Tkinter 8.5 detailing available classes, methods, and options.
47
48   Tcl/Tk Resources:
49
50   * `Tk commands <https://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm>`_
51      Comprehensive reference to each of the underlying Tcl/Tk commands used by Tkinter.
52
53   * `Tcl/Tk Home Page <https://www.tcl.tk>`_
54      Additional documentation, and links to Tcl/Tk core development.
55
56   Books:
57
58   * `Modern Tkinter for Busy Python Developers <https://tkdocs.com/book.html>`_
59      By Mark Roseman. (ISBN 978-1999149567)
60
61   * `Python and Tkinter Programming <https://www.packtpub.com/product/python-gui-programming-with-tkinter/9781788835886>`_
62      By Alan Moore. (ISBN 978-1788835886)
63
64   * `Programming Python <http://learning-python.com/about-pp4e.html>`_
65      By Mark Lutz; has excellent coverage of Tkinter. (ISBN 978-0596158101)
66
67   * `Tcl and the Tk Toolkit (2nd edition)  <https://www.amazon.com/exec/obidos/ASIN/032133633X>`_
68      By John Ousterhout, inventor of Tcl/Tk, and Ken Jones; does not cover Tkinter. (ISBN 978-0321336330)
69
70
71Architecture
72------------
73
74Tcl/Tk is not a single library but rather consists of a few distinct
75modules, each with separate functionality and its own official
76documentation. Python's binary releases also ship an add-on module
77together with it.
78
79Tcl
80   Tcl is a dynamic interpreted programming language, just like Python. Though
81   it can be used on its own as a general-purpose programming language, it is
82   most commonly embedded into C applications as a scripting engine or an
83   interface to the Tk toolkit. The Tcl library has a C interface to
84   create and manage one or more instances of a Tcl interpreter, run Tcl
85   commands and scripts in those instances, and add custom commands
86   implemented in either Tcl or C. Each interpreter has an event queue,
87   and there are facilities to send events to it and process them.
88   Unlike Python, Tcl's execution model is designed around cooperative
89   multitasking, and Tkinter bridges this difference
90   (see `Threading model`_ for details).
91
92Tk
93   Tk is a `Tcl package <http://wiki.tcl.tk/37432>`_ implemented in C
94   that adds custom commands to create and manipulate GUI widgets. Each
95   :class:`Tk` object embeds its own Tcl interpreter instance with Tk loaded into
96   it. Tk's widgets are very customizable, though at the cost of a dated appearance.
97   Tk uses Tcl's event queue to generate and process GUI events.
98
99Ttk
100   Themed Tk (Ttk) is a newer family of Tk widgets that provide a much better
101   appearance on different platforms than many of the classic Tk widgets.
102   Ttk is distributed as part of Tk, starting with Tk version 8.5. Python
103   bindings are provided in a separate module, :mod:`tkinter.ttk`.
104
105Internally, Tk and Ttk use facilities of the underlying operating system,
106i.e., Xlib on Unix/X11, Cocoa on macOS, GDI on Windows.
107
108When your Python application uses a class in Tkinter, e.g., to create a widget,
109the :mod:`tkinter` module first assembles a Tcl/Tk command string. It passes that
110Tcl command string to an internal :mod:`_tkinter` binary module, which then
111calls the Tcl interpreter to evaluate it. The Tcl interpreter will then call into the
112Tk and/or Ttk packages, which will in turn make calls to Xlib, Cocoa, or GDI.
113
114
115Tkinter Modules
116---------------
117
118Support for Tkinter is spread across several modules. Most applications will need the
119main :mod:`tkinter` module, as well as the :mod:`tkinter.ttk` module, which provides
120the modern themed widget set and API::
121
122
123   from tkinter import *
124   from tkinter import ttk
125
126
127.. class:: Tk(screenName=None, baseName=None, className='Tk', useTk=1)
128
129   The :class:`Tk` class is instantiated without arguments. This creates a toplevel
130   widget of Tk which usually is the main window of an application. Each instance
131   has its own associated Tcl interpreter.
132
133   .. FIXME: The following keyword arguments are currently recognized:
134
135
136.. function:: Tcl(screenName=None, baseName=None, className='Tk', useTk=0)
137
138   The :func:`Tcl` function is a factory function which creates an object much like
139   that created by the :class:`Tk` class, except that it does not initialize the Tk
140   subsystem.  This is most often useful when driving the Tcl interpreter in an
141   environment where one doesn't want to create extraneous toplevel windows, or
142   where one cannot (such as Unix/Linux systems without an X server).  An object
143   created by the :func:`Tcl` object can have a Toplevel window created (and the Tk
144   subsystem initialized) by calling its :meth:`loadtk` method.
145
146
147The modules that provide Tk support include:
148
149:mod:`tkinter`
150   Main Tkinter module.
151
152:mod:`tkinter.colorchooser`
153   Dialog to let the user choose a color.
154
155:mod:`tkinter.commondialog`
156   Base class for the dialogs defined in the other modules listed here.
157
158:mod:`tkinter.filedialog`
159   Common dialogs to allow the user to specify a file to open or save.
160
161:mod:`tkinter.font`
162   Utilities to help work with fonts.
163
164:mod:`tkinter.messagebox`
165   Access to standard Tk dialog boxes.
166
167:mod:`tkinter.scrolledtext`
168   Text widget with a vertical scroll bar built in.
169
170:mod:`tkinter.simpledialog`
171   Basic dialogs and convenience functions.
172
173:mod:`tkinter.ttk`
174   Themed widget set introduced in Tk 8.5, providing modern alternatives
175   for many of the classic widgets in the main :mod:`tkinter` module.
176
177Additional modules:
178
179:mod:`_tkinter`
180   A binary module that contains the low-level interface to Tcl/Tk.
181   It is automatically imported by the main :mod:`tkinter` module,
182   and should never be used directly by application programmers.
183   It is usually a shared library (or DLL), but might in some cases be
184   statically linked with the Python interpreter.
185
186:mod:`idlelib`
187   Python's Integrated Development and Learning Environment (IDLE). Based
188   on :mod:`tkinter`.
189
190:mod:`tkinter.constants`
191   Symbolic constants that can be used in place of strings when passing
192   various parameters to Tkinter calls. Automatically imported by the
193   main :mod:`tkinter` module.
194
195:mod:`tkinter.dnd`
196   (experimental) Drag-and-drop support for :mod:`tkinter`. This will
197   become deprecated when it is replaced with the Tk DND.
198
199:mod:`tkinter.tix`
200   (deprecated) An older third-party Tcl/Tk package that adds several new
201   widgets. Better alternatives for most can be found in :mod:`tkinter.ttk`.
202
203:mod:`turtle`
204   Turtle graphics in a Tk window.
205
206
207Tkinter Life Preserver
208----------------------
209
210This section is not designed to be an exhaustive tutorial on either Tk or
211Tkinter.  For that, refer to one of the external resources noted earlier.
212Instead, this section provides a very quick orientation to what a Tkinter
213application looks like, identifies foundational Tk concepts, and
214explains how the Tkinter wrapper is structured.
215
216The remainder of this section will help you to identify the classes,
217methods, and options you'll need in your Tkinter application, and where to
218find more detailed documentation on them, including in the official Tcl/Tk
219reference manual.
220
221
222A Hello World Program
223^^^^^^^^^^^^^^^^^^^^^
224
225We'll start by walking through a "Hello World" application in Tkinter. This
226isn't the smallest one we could write, but has enough to illustrate some
227key concepts you'll need to know.
228
229::
230
231    from tkinter import *
232    from tkinter import ttk
233    root = Tk()
234    frm = ttk.Frame(root, padding=10)
235    frm.grid()
236    ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
237    ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
238    root.mainloop()
239
240
241After the imports, the next line creates an instance of the :class:`Tk` class,
242which initializes Tk and creates its associated Tcl interpreter. It also
243creates a toplevel window, known as the root window, which serves as the main
244window of the application.
245
246The following line creates a frame widget, which in this case will contain
247a label and a button we'll create next. The frame is fit inside the root
248window.
249
250The next line creates a label widget holding a static text string. The
251:meth:`grid` method is used to specify the relative layout (position) of the
252label within its containing frame widget, similar to how tables in HTML work.
253
254A button widget is then created, and placed to the right of the label. When
255pressed, it will call the :meth:`destroy` method of the root window.
256
257Finally, the :meth:`mainloop` method puts everything on the display, and
258responds to user input until the program terminates.
259
260
261
262Important Tk Concepts
263^^^^^^^^^^^^^^^^^^^^^
264
265Even this simple program illustrates the following key Tk concepts:
266
267widgets
268  A Tkinter user interface is made up of individual *widgets*. Each widget is
269  represented as a Python object, instantiated from classes like
270  :class:`ttk.Frame`, :class:`ttk.Label`, and :class:`ttk.Button`.
271
272widget hierarchy
273  Widgets are arranged in a *hierarchy*. The label and button were contained
274  within a frame, which in turn was contained within the root window. When
275  creating each *child* widget, its *parent* widget is passed as the first
276  argument to the widget constructor.
277
278configuration options
279  Widgets have *configuration options*, which modify their appearance and
280  behavior, such as the text to display in a label or button. Different
281  classes of widgets will have different sets of options.
282
283geometry management
284  Widgets aren't automatically added to the user interface when they are
285  created. A *geometry manager* like ``grid`` controls where in the
286  user interface they are placed.
287
288event loop
289  Tkinter reacts to user input, changes from your program, and even refreshes
290  the display only when actively running an *event loop*. If your program
291  isn't running the event loop, your user interface won't update.
292
293
294Understanding How Tkinter Wraps Tcl/Tk
295^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
296
297When your application uses Tkinter's classes and methods, internally Tkinter
298is assembling strings representing Tcl/Tk commands, and executing those
299commands in the Tcl interpreter attached to your applicaton's :class:`Tk`
300instance.
301
302Whether it's trying to navigate reference documentation, trying to find
303the right method or option, adapting some existing code, or debugging your
304Tkinter application, there are times that it will be useful to understand
305what those underlying Tcl/Tk commands look like.
306
307To illustrate, here is the Tcl/Tk equivalent of the main part of the Tkinter
308script above.
309
310::
311
312    ttk::frame .frm -padding 10
313    grid .frm
314    grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0
315    grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
316
317
318Tcl's syntax is similar to many shell languages, where the first word is the
319command to be executed, with arguments to that command following it, separated
320by spaces. Without getting into too many details, notice the following:
321
322* The commands used to create widgets (like ``ttk::frame``) correspond to
323  widget classes in Tkinter.
324
325* Tcl widget options (like ``-text``) correspond to keyword arguments in
326  Tkinter.
327
328* Widgets are referred to by a *pathname* in Tcl (like ``.frm.btn``),
329  whereas Tkinter doesn't use names but object references.
330
331* A widget's place in the widget hierarchy is encoded in its (hierarchical)
332  pathname, which uses a ``.`` (dot) as a path separator. The pathname for
333  the root window is just ``.`` (dot). In Tkinter, the hierarchy is defined
334  not by pathname but by specifying the parent widget when creating each
335  child widget.
336
337* Operations which are implemented as separate *commands* in Tcl (like
338  ``grid`` or ``destroy``) are represented as *methods* on Tkinter widget
339  objects. As you'll see shortly, at other times Tcl uses what appear to be
340  method calls on widget objects, which more closely mirror what would is
341  used in Tkinter.
342
343
344How do I...? What option does...?
345^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
346
347If you're not sure how to do something in Tkinter, and you can't immediately
348find it in the tutorial or reference documentation you're using, there are a
349few strategies that can be helpful.
350
351First, remember that the details of how individual widgets work may vary
352across different versions of both Tkinter and Tcl/Tk. If you're searching
353documentation, make sure it corresponds to the Python and Tcl/Tk versions
354installed on your system.
355
356When searching for how to use an API, it helps to know the exact name of the
357class, option, or method that you're using. Introspection, either in an
358interactive Python shell or with :func:`print`, can help you identify what
359you need.
360
361To find out what configuration options are available on any widget, call its
362:meth:`configure` method, which returns a dictionary containing a variety of
363information about each object, including its default and current values. Use
364:meth:`keys` to get just the names of each option.
365
366::
367
368    btn = ttk.Button(frm, ...)
369    print(btn.configure().keys())
370
371As most widgets have many configuration options in common, it can be useful
372to find out which are specific to a particular widget class. Comparing the
373list of options to that of a simpler widget, like a frame, is one way to
374do that.
375
376::
377
378    print(set(btn.configure().keys()) - set(frm.configure().keys()))
379
380Similarly, you can find the available methods for a widget object using the
381standard :func:`dir` function. If you try it, you'll see there are over 200
382common widget methods, so again identifying those specific to a widget class
383is helpful.
384
385::
386
387    print(dir(btn))
388    print(set(dir(btn)) - set(dir(frm)))
389
390
391Navigating the Tcl/Tk Reference Manual
392^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
393
394As noted, the official `Tk commands <https://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm>`_
395reference manual (man pages) is often the most accurate description of what
396specific operations on widgets do. Even when you know the name of the option
397or method that you need, you may still have a few places to look.
398
399While all operations in Tkinter are implemented as method calls on widget
400objects, you've seen that many Tcl/Tk operations appear as commands that
401take a widget pathname as its first parameter, followed by optional
402parameters, e.g.
403
404::
405
406    destroy .
407    grid .frm.btn -column 0 -row 0
408
409Others, however, look more like methods called on a widget object (in fact,
410when you create a widget in Tcl/Tk, it creates a Tcl command with the name
411of the widget pathname, with the first parameter to that command being the
412name of a method to call).
413
414::
415
416    .frm.btn invoke
417    .frm.lbl configure -text "Goodbye"
418
419
420In the official Tcl/Tk reference documentation, you'll find most operations
421that look like method calls on the man page for a specific widget (e.g.,
422you'll find the :meth:`invoke` method on the
423`ttk::button <https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_button.htm>`_
424man page), while functions that take a widget as a parameter often have
425their own man page (e.g.,
426`grid <https://www.tcl.tk/man/tcl8.6/TkCmd/grid.htm>`_).
427
428You'll find many common options and methods in the
429`options <https://www.tcl.tk/man/tcl8.6/TkCmd/options.htm>`_ or
430`ttk::widget <https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_widget.htm>`_ man
431pages, while others are found in the man page for a specific widget class.
432
433You'll also find that many Tkinter methods have compound names, e.g.,
434:func:`winfo_x`, :func:`winfo_height`, :func:`winfo_viewable`. You'd find
435documentation for all of these in the
436`winfo <https://www.tcl.tk/man/tcl8.6/TkCmd/winfo.htm>`_ man page.
437
438.. note::
439   Somewhat confusingly, there are also methods on all Tkinter widgets
440   that don't actually operate on the widget, but operate at a global
441   scope, independent of any widget. Examples are methods for accessing
442   the clipboard or the system bell. (They happen to be implemented as
443   methods in the base :class:`Widget` class that all Tkinter widgets
444   inherit from).
445
446
447Threading model
448---------------
449
450Python and Tcl/Tk have very different threading models, which :mod:`tkinter`
451tries to bridge. If you use threads, you may need to be aware of this.
452
453A Python interpreter may have many threads associated with it. In Tcl, multiple
454threads can be created, but each thread has a separate Tcl interpreter instance
455associated with it. Threads can also create more than one interpreter instance,
456though each interpreter instance can be used only by the one thread that created it.
457
458Each :class:`Tk` object created by :mod:`tkinter` contains a Tcl interpreter.
459It also keeps track of which thread created that interpreter. Calls to
460:mod:`tkinter` can be made from any Python thread. Internally, if a call comes
461from a thread other than the one that created the :class:`Tk` object, an event
462is posted to the interpreter's event queue, and when executed, the result is
463returned to the calling Python thread.
464
465Tcl/Tk applications are normally event-driven, meaning that after initialization,
466the interpreter runs an event loop (i.e. :func:`Tk.mainloop`) and responds to events.
467Because it is single-threaded, event handlers must respond quickly, otherwise they
468will block other events from being processed. To avoid this, any long-running
469computations should not run in an event handler, but are either broken into smaller
470pieces using timers, or run in another thread. This is different from many GUI
471toolkits where the GUI runs in a completely separate thread from all application
472code including event handlers.
473
474If the Tcl interpreter is not running the event loop and processing events, any
475:mod:`tkinter` calls made from threads other than the one running the Tcl
476interpreter will fail.
477
478A number of special cases exist:
479
480  * Tcl/Tk libraries can be built so they are not thread-aware. In this case,
481    :mod:`tkinter` calls the library from the originating Python thread, even
482    if this is different than the thread that created the Tcl interpreter. A global
483    lock ensures only one call occurs at a time.
484
485  * While :mod:`tkinter` allows you to create more than one instance of a :class:`Tk`
486    object (with its own interpreter), all interpreters that are part of the same
487    thread share a common event queue, which gets ugly fast. In practice, don't create
488    more than one instance of :class:`Tk` at a time. Otherwise, it's best to create
489    them in separate threads and ensure you're running a thread-aware Tcl/Tk build.
490
491  * Blocking event handlers are not the only way to prevent the Tcl interpreter from
492    reentering the event loop. It is even possible to run multiple nested event loops
493    or abandon the event loop entirely. If you're doing anything tricky when it comes
494    to events or threads, be aware of these possibilities.
495
496  * There are a few select :mod:`tkinter` functions that presently work only when
497    called from the thread that created the Tcl interpreter.
498
499
500Handy Reference
501---------------
502
503
504.. _tkinter-setting-options:
505
506Setting Options
507^^^^^^^^^^^^^^^
508
509Options control things like the color and border width of a widget. Options can
510be set in three ways:
511
512At object creation time, using keyword arguments
513   ::
514
515      fred = Button(self, fg="red", bg="blue")
516
517After object creation, treating the option name like a dictionary index
518   ::
519
520      fred["fg"] = "red"
521      fred["bg"] = "blue"
522
523Use the config() method to update multiple attrs subsequent to object creation
524   ::
525
526      fred.config(fg="red", bg="blue")
527
528For a complete explanation of a given option and its behavior, see the Tk man
529pages for the widget in question.
530
531Note that the man pages list "STANDARD OPTIONS" and "WIDGET SPECIFIC OPTIONS"
532for each widget.  The former is a list of options that are common to many
533widgets, the latter are the options that are idiosyncratic to that particular
534widget.  The Standard Options are documented on the :manpage:`options(3)` man
535page.
536
537No distinction between standard and widget-specific options is made in this
538document.  Some options don't apply to some kinds of widgets. Whether a given
539widget responds to a particular option depends on the class of the widget;
540buttons have a ``command`` option, labels do not.
541
542The options supported by a given widget are listed in that widget's man page, or
543can be queried at runtime by calling the :meth:`config` method without
544arguments, or by calling the :meth:`keys` method on that widget.  The return
545value of these calls is a dictionary whose key is the name of the option as a
546string (for example, ``'relief'``) and whose values are 5-tuples.
547
548Some options, like ``bg`` are synonyms for common options with long names
549(``bg`` is shorthand for "background"). Passing the ``config()`` method the name
550of a shorthand option will return a 2-tuple, not 5-tuple. The 2-tuple passed
551back will contain the name of the synonym and the "real" option (such as
552``('bg', 'background')``).
553
554+-------+---------------------------------+--------------+
555| Index | Meaning                         | Example      |
556+=======+=================================+==============+
557| 0     | option name                     | ``'relief'`` |
558+-------+---------------------------------+--------------+
559| 1     | option name for database lookup | ``'relief'`` |
560+-------+---------------------------------+--------------+
561| 2     | option class for database       | ``'Relief'`` |
562|       | lookup                          |              |
563+-------+---------------------------------+--------------+
564| 3     | default value                   | ``'raised'`` |
565+-------+---------------------------------+--------------+
566| 4     | current value                   | ``'groove'`` |
567+-------+---------------------------------+--------------+
568
569Example::
570
571   >>> print(fred.config())
572   {'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}
573
574Of course, the dictionary printed will include all the options available and
575their values.  This is meant only as an example.
576
577
578The Packer
579^^^^^^^^^^
580
581.. index:: single: packing (widgets)
582
583The packer is one of Tk's geometry-management mechanisms.    Geometry managers
584are used to specify the relative positioning of widgets within their container -
585their mutual *master*.  In contrast to the more cumbersome *placer* (which is
586used less commonly, and we do not cover here), the packer takes qualitative
587relationship specification - *above*, *to the left of*, *filling*, etc - and
588works everything out to determine the exact placement coordinates for you.
589
590The size of any *master* widget is determined by the size of the "slave widgets"
591inside.  The packer is used to control where slave widgets appear inside the
592master into which they are packed.  You can pack widgets into frames, and frames
593into other frames, in order to achieve the kind of layout you desire.
594Additionally, the arrangement is dynamically adjusted to accommodate incremental
595changes to the configuration, once it is packed.
596
597Note that widgets do not appear until they have had their geometry specified
598with a geometry manager.  It's a common early mistake to leave out the geometry
599specification, and then be surprised when the widget is created but nothing
600appears.  A widget will appear only after it has had, for example, the packer's
601:meth:`pack` method applied to it.
602
603The pack() method can be called with keyword-option/value pairs that control
604where the widget is to appear within its container, and how it is to behave when
605the main application window is resized.  Here are some examples::
606
607   fred.pack()                     # defaults to side = "top"
608   fred.pack(side="left")
609   fred.pack(expand=1)
610
611
612Packer Options
613^^^^^^^^^^^^^^
614
615For more extensive information on the packer and the options that it can take,
616see the man pages and page 183 of John Ousterhout's book.
617
618anchor
619   Anchor type.  Denotes where the packer is to place each slave in its parcel.
620
621expand
622   Boolean, ``0`` or ``1``.
623
624fill
625   Legal values: ``'x'``, ``'y'``, ``'both'``, ``'none'``.
626
627ipadx and ipady
628   A distance - designating internal padding on each side of the slave widget.
629
630padx and pady
631   A distance - designating external padding on each side of the slave widget.
632
633side
634   Legal values are: ``'left'``, ``'right'``, ``'top'``, ``'bottom'``.
635
636
637Coupling Widget Variables
638^^^^^^^^^^^^^^^^^^^^^^^^^
639
640The current-value setting of some widgets (like text entry widgets) can be
641connected directly to application variables by using special options.  These
642options are ``variable``, ``textvariable``, ``onvalue``, ``offvalue``, and
643``value``.  This connection works both ways: if the variable changes for any
644reason, the widget it's connected to will be updated to reflect the new value.
645
646Unfortunately, in the current implementation of :mod:`tkinter` it is not
647possible to hand over an arbitrary Python variable to a widget through a
648``variable`` or ``textvariable`` option.  The only kinds of variables for which
649this works are variables that are subclassed from a class called Variable,
650defined in :mod:`tkinter`.
651
652There are many useful subclasses of Variable already defined:
653:class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and
654:class:`BooleanVar`.  To read the current value of such a variable, call the
655:meth:`get` method on it, and to change its value you call the :meth:`!set`
656method.  If you follow this protocol, the widget will always track the value of
657the variable, with no further intervention on your part.
658
659For example::
660
661   import tkinter as tk
662
663   class App(tk.Frame):
664       def __init__(self, master):
665           super().__init__(master)
666           self.pack()
667
668           self.entrythingy = tk.Entry()
669           self.entrythingy.pack()
670
671           # Create the application variable.
672           self.contents = tk.StringVar()
673           # Set it to some value.
674           self.contents.set("this is a variable")
675           # Tell the entry widget to watch this variable.
676           self.entrythingy["textvariable"] = self.contents
677
678           # Define a callback for when the user hits return.
679           # It prints the current value of the variable.
680           self.entrythingy.bind('<Key-Return>',
681                                self.print_contents)
682
683       def print_contents(self, event):
684           print("Hi. The current entry content is:",
685                 self.contents.get())
686
687   root = tk.Tk()
688   myapp = App(root)
689   myapp.mainloop()
690
691The Window Manager
692^^^^^^^^^^^^^^^^^^
693
694.. index:: single: window manager (widgets)
695
696In Tk, there is a utility command, ``wm``, for interacting with the window
697manager.  Options to the ``wm`` command allow you to control things like titles,
698placement, icon bitmaps, and the like.  In :mod:`tkinter`, these commands have
699been implemented as methods on the :class:`Wm` class.  Toplevel widgets are
700subclassed from the :class:`Wm` class, and so can call the :class:`Wm` methods
701directly.
702
703To get at the toplevel window that contains a given widget, you can often just
704refer to the widget's master.  Of course if the widget has been packed inside of
705a frame, the master won't represent a toplevel window.  To get at the toplevel
706window that contains an arbitrary widget, you can call the :meth:`_root` method.
707This method begins with an underscore to denote the fact that this function is
708part of the implementation, and not an interface to Tk functionality.
709
710Here are some examples of typical usage::
711
712   import tkinter as tk
713
714   class App(tk.Frame):
715       def __init__(self, master=None):
716           super().__init__(master)
717           self.pack()
718
719   # create the application
720   myapp = App()
721
722   #
723   # here are method calls to the window manager class
724   #
725   myapp.master.title("My Do-Nothing Application")
726   myapp.master.maxsize(1000, 400)
727
728   # start the program
729   myapp.mainloop()
730
731
732Tk Option Data Types
733^^^^^^^^^^^^^^^^^^^^
734
735.. index:: single: Tk Option Data Types
736
737anchor
738   Legal values are points of the compass: ``"n"``, ``"ne"``, ``"e"``, ``"se"``,
739   ``"s"``, ``"sw"``, ``"w"``, ``"nw"``, and also ``"center"``.
740
741bitmap
742   There are eight built-in, named bitmaps: ``'error'``, ``'gray25'``,
743   ``'gray50'``, ``'hourglass'``, ``'info'``, ``'questhead'``, ``'question'``,
744   ``'warning'``.  To specify an X bitmap filename, give the full path to the file,
745   preceded with an ``@``, as in ``"@/usr/contrib/bitmap/gumby.bit"``.
746
747boolean
748   You can pass integers 0 or 1 or the strings ``"yes"`` or ``"no"``.
749
750callback
751   This is any Python function that takes no arguments.  For example::
752
753      def print_it():
754          print("hi there")
755      fred["command"] = print_it
756
757color
758   Colors can be given as the names of X colors in the rgb.txt file, or as strings
759   representing RGB values in 4 bit: ``"#RGB"``, 8 bit: ``"#RRGGBB"``, 12 bit"
760   ``"#RRRGGGBBB"``, or 16 bit ``"#RRRRGGGGBBBB"`` ranges, where R,G,B here
761   represent any legal hex digit.  See page 160 of Ousterhout's book for details.
762
763cursor
764   The standard X cursor names from :file:`cursorfont.h` can be used, without the
765   ``XC_`` prefix.  For example to get a hand cursor (:const:`XC_hand2`), use the
766   string ``"hand2"``.  You can also specify a bitmap and mask file of your own.
767   See page 179 of Ousterhout's book.
768
769distance
770   Screen distances can be specified in either pixels or absolute distances.
771   Pixels are given as numbers and absolute distances as strings, with the trailing
772   character denoting units: ``c`` for centimetres, ``i`` for inches, ``m`` for
773   millimetres, ``p`` for printer's points.  For example, 3.5 inches is expressed
774   as ``"3.5i"``.
775
776font
777   Tk uses a list font name format, such as ``{courier 10 bold}``. Font sizes with
778   positive numbers are measured in points; sizes with negative numbers are
779   measured in pixels.
780
781geometry
782   This is a string of the form ``widthxheight``, where width and height are
783   measured in pixels for most widgets (in characters for widgets displaying text).
784   For example: ``fred["geometry"] = "200x100"``.
785
786justify
787   Legal values are the strings: ``"left"``, ``"center"``, ``"right"``, and
788   ``"fill"``.
789
790region
791   This is a string with four space-delimited elements, each of which is a legal
792   distance (see above).  For example: ``"2 3 4 5"`` and ``"3i 2i 4.5i 2i"`` and
793   ``"3c 2c 4c 10.43c"``  are all legal regions.
794
795relief
796   Determines what the border style of a widget will be.  Legal values are:
797   ``"raised"``, ``"sunken"``, ``"flat"``, ``"groove"``, and ``"ridge"``.
798
799scrollcommand
800   This is almost always the :meth:`!set` method of some scrollbar widget, but can
801   be any widget method that takes a single argument.
802
803wrap
804   Must be one of: ``"none"``, ``"char"``, or ``"word"``.
805
806.. _Bindings-and-Events:
807
808Bindings and Events
809^^^^^^^^^^^^^^^^^^^
810
811.. index::
812   single: bind (widgets)
813   single: events (widgets)
814
815The bind method from the widget command allows you to watch for certain events
816and to have a callback function trigger when that event type occurs.  The form
817of the bind method is::
818
819   def bind(self, sequence, func, add=''):
820
821where:
822
823sequence
824   is a string that denotes the target kind of event.  (See the bind man page and
825   page 201 of John Ousterhout's book for details).
826
827func
828   is a Python function, taking one argument, to be invoked when the event occurs.
829   An Event instance will be passed as the argument. (Functions deployed this way
830   are commonly known as *callbacks*.)
831
832add
833   is optional, either ``''`` or ``'+'``.  Passing an empty string denotes that
834   this binding is to replace any other bindings that this event is associated
835   with.  Passing a ``'+'`` means that this function is to be added to the list
836   of functions bound to this event type.
837
838For example::
839
840   def turn_red(self, event):
841       event.widget["activeforeground"] = "red"
842
843   self.button.bind("<Enter>", self.turn_red)
844
845Notice how the widget field of the event is being accessed in the
846``turn_red()`` callback.  This field contains the widget that caught the X
847event.  The following table lists the other event fields you can access, and how
848they are denoted in Tk, which can be useful when referring to the Tk man pages.
849
850+----+---------------------+----+---------------------+
851| Tk | Tkinter Event Field | Tk | Tkinter Event Field |
852+====+=====================+====+=====================+
853| %f | focus               | %A | char                |
854+----+---------------------+----+---------------------+
855| %h | height              | %E | send_event          |
856+----+---------------------+----+---------------------+
857| %k | keycode             | %K | keysym              |
858+----+---------------------+----+---------------------+
859| %s | state               | %N | keysym_num          |
860+----+---------------------+----+---------------------+
861| %t | time                | %T | type                |
862+----+---------------------+----+---------------------+
863| %w | width               | %W | widget              |
864+----+---------------------+----+---------------------+
865| %x | x                   | %X | x_root              |
866+----+---------------------+----+---------------------+
867| %y | y                   | %Y | y_root              |
868+----+---------------------+----+---------------------+
869
870
871The index Parameter
872^^^^^^^^^^^^^^^^^^^
873
874A number of widgets require "index" parameters to be passed.  These are used to
875point at a specific place in a Text widget, or to particular characters in an
876Entry widget, or to particular menu items in a Menu widget.
877
878Entry widget indexes (index, view index, etc.)
879   Entry widgets have options that refer to character positions in the text being
880   displayed.  You can use these :mod:`tkinter` functions to access these special
881   points in text widgets:
882
883Text widget indexes
884   The index notation for Text widgets is very rich and is best described in the Tk
885   man pages.
886
887Menu indexes (menu.invoke(), menu.entryconfig(), etc.)
888   Some options and methods for menus manipulate specific menu entries. Anytime a
889   menu index is needed for an option or a parameter, you may pass in:
890
891   * an integer which refers to the numeric position of the entry in the widget,
892     counted from the top, starting with 0;
893
894   * the string ``"active"``, which refers to the menu position that is currently
895     under the cursor;
896
897   * the string ``"last"`` which refers to the last menu item;
898
899   * An integer preceded by ``@``, as in ``@6``, where the integer is interpreted
900     as a y pixel coordinate in the menu's coordinate system;
901
902   * the string ``"none"``, which indicates no menu entry at all, most often used
903     with menu.activate() to deactivate all entries, and finally,
904
905   * a text string that is pattern matched against the label of the menu entry, as
906     scanned from the top of the menu to the bottom.  Note that this index type is
907     considered after all the others, which means that matches for menu items
908     labelled ``last``, ``active``, or ``none`` may be interpreted as the above
909     literals, instead.
910
911
912Images
913^^^^^^
914
915Images of different formats can be created through the corresponding subclass
916of :class:`tkinter.Image`:
917
918* :class:`BitmapImage` for images in XBM format.
919
920* :class:`PhotoImage` for images in PGM, PPM, GIF and PNG formats. The latter
921  is supported starting with Tk 8.6.
922
923Either type of image is created through either the ``file`` or the ``data``
924option (other options are available as well).
925
926The image object can then be used wherever an ``image`` option is supported by
927some widget (e.g. labels, buttons, menus). In these cases, Tk will not keep a
928reference to the image. When the last Python reference to the image object is
929deleted, the image data is deleted as well, and Tk will display an empty box
930wherever the image was used.
931
932.. seealso::
933
934    The `Pillow <http://python-pillow.org/>`_ package adds support for
935    formats such as BMP, JPEG, TIFF, and WebP, among others.
936
937.. _tkinter-file-handlers:
938
939File Handlers
940-------------
941
942Tk allows you to register and unregister a callback function which will be
943called from the Tk mainloop when I/O is possible on a file descriptor.
944Only one handler may be registered per file descriptor. Example code::
945
946   import tkinter
947   widget = tkinter.Tk()
948   mask = tkinter.READABLE | tkinter.WRITABLE
949   widget.tk.createfilehandler(file, mask, callback)
950   ...
951   widget.tk.deletefilehandler(file)
952
953This feature is not available on Windows.
954
955Since you don't know how many bytes are available for reading, you may not
956want to use the :class:`~io.BufferedIOBase` or :class:`~io.TextIOBase`
957:meth:`~io.BufferedIOBase.read` or :meth:`~io.IOBase.readline` methods,
958since these will insist on reading a predefined number of bytes.
959For sockets, the :meth:`~socket.socket.recv` or
960:meth:`~socket.socket.recvfrom` methods will work fine; for other files,
961use raw reads or ``os.read(file.fileno(), maxbytecount)``.
962
963
964.. method:: Widget.tk.createfilehandler(file, mask, func)
965
966   Registers the file handler callback function *func*. The *file* argument
967   may either be an object with a :meth:`~io.IOBase.fileno` method (such as
968   a file or socket object), or an integer file descriptor. The *mask*
969   argument is an ORed combination of any of the three constants below.
970   The callback is called as follows::
971
972      callback(file, mask)
973
974
975.. method:: Widget.tk.deletefilehandler(file)
976
977   Unregisters a file handler.
978
979
980.. data:: READABLE
981          WRITABLE
982          EXCEPTION
983
984   Constants used in the *mask* arguments.
985