blob: 34238f4cdd0bbe844a93951b766de24f66d84e3e [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
Miss Islington (bot)61ecd3e2021-08-22 11:54:46 -070014the Tcl/Tk GUI toolkit. Both Tk and :mod:`tkinter` are available on most Unix
15platforms, including macOS, as well as on Windows systems.
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030016
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.
Georg Brandl116aa622007-08-15 14:28:22 +000021
Miss Islington (bot)2666d702021-08-11 10:16:10 -070022Tkinter 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
Georg Brandl116aa622007-08-15 14:28:22 +000032.. seealso::
33
Łukasz Langa8e90f152021-08-22 21:04:57 +020034 * `TkDocs <http://tkdocs.com/>`_
35 Extensive tutorial on creating user interfaces with Tkinter. Explains key concepts,
36 and illustrates recommended approaches using the modern API.
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030037
Łukasz Langa8e90f152021-08-22 21:04:57 +020038 * `Tkinter 8.5 reference: a GUI for Python <https://www.tkdocs.com/shipman/>`_
39 Reference documentation for Tkinter 8.5 detailing available classes, methods, and options.
Georg Brandl116aa622007-08-15 14:28:22 +000040
Łukasz Langa8e90f152021-08-22 21:04:57 +020041 Tcl/Tk Resources:
Andrew Svetlove708a8a2012-07-26 17:02:57 +030042
Łukasz Langa8e90f152021-08-22 21:04:57 +020043 * `Tk commands <https://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm>`_
44 Comprehensive reference to each of the underlying Tcl/Tk commands used by Tkinter.
Andrew Svetlove708a8a2012-07-26 17:02:57 +030045
Łukasz Langa8e90f152021-08-22 21:04:57 +020046 * `Tcl/Tk Home Page <https://www.tcl.tk>`_
47 Additional documentation, and links to Tcl/Tk core development.
Andrew Svetlove708a8a2012-07-26 17:02:57 +030048
Łukasz Langa8e90f152021-08-22 21:04:57 +020049 Books:
Andrew Svetlove708a8a2012-07-26 17:02:57 +030050
Łukasz Langa8e90f152021-08-22 21:04:57 +020051 * `Modern Tkinter for Busy Python Developers <https://tkdocs.com/book.html>`_
52 By Mark Roseman. (ISBN 978-1999149567)
Andrew Svetlove708a8a2012-07-26 17:02:57 +030053
Łukasz Langa8e90f152021-08-22 21:04:57 +020054 * `Python and Tkinter Programming <https://www.packtpub.com/product/python-gui-programming-with-tkinter/9781788835886>`_
55 By Alan Moore. (ISBN 978-1788835886)
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030056
Łukasz Langa8e90f152021-08-22 21:04:57 +020057 * `Programming Python <http://learning-python.com/about-pp4e.html>`_
58 By Mark Lutz; has excellent coverage of Tkinter. (ISBN 978-0596158101)
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030059
Łukasz Langa8e90f152021-08-22 21:04:57 +020060 * `Tcl and the Tk Toolkit (2nd edition) <https://www.amazon.com/exec/obidos/ASIN/032133633X>`_
61 By John Ousterhout, inventor of Tcl/Tk, and Ken Jones; does not cover Tkinter. (ISBN 978-0321336330)
Georg Brandl116aa622007-08-15 14:28:22 +000062
63
Miss Islington (bot)2666d702021-08-11 10:16:10 -070064Architecture
65------------
66
67Tcl/Tk is not a single library but rather consists of a few distinct
68modules, each with a separate functionality and its own official
69documentation. Python's binary releases also ship an add-on module
70together with it.
71
72Tcl
73 Tcl is a dynamic interpreted programming language, just like Python. Though
74 it can be used on its own as a general-purpose programming language, it is
75 most commonly embedded into C applications as a scripting engine or an
76 interface to the Tk toolkit. The Tcl library has a C interface to
77 create and manage one or more instances of a Tcl interpreter, run Tcl
78 commands and scripts in those instances, and add custom commands
79 implemented in either Tcl or C. Each interpreter has an event queue,
80 and there are facilities to send events to it and process them.
81 Unlike Python, Tcl's execution model is designed around cooperative
82 multitasking, and Tkinter bridges this difference
83 (see `Threading model`_ for details).
84
85Tk
86 Tk is a `Tcl package <http://wiki.tcl.tk/37432>`_ implemented in C
87 that adds custom commands to create and manipulate GUI widgets. Each
88 :class:`Tk` object embeds its own Tcl interpreter instance with Tk loaded into
89 it. Tk's widgets are very customizable, though at the cost of a dated appearance.
90 Tk uses Tcl's event queue to generate and process GUI events.
91
92Ttk
93 Themed Tk (Ttk) is a newer family of Tk widgets that provide a much better
94 appearance on different platforms than many of the classic Tk widgets.
95 Ttk is distributed as part of Tk, starting with Tk version 8.5. Python
96 bindings are provided in a separate module, :mod:`tkinter.ttk`.
97
98Tix
99 `Tix <https://core.tcl.tk/jenglish/gutter/packages/tix.html>`_ is an older
100 third-party Tcl package, an add-on for Tk that adds several new widgets.
101 Python bindings are found in the :mod:`tkinter.tix` module.
102 It's deprecated in favor of Ttk.
103
104
Georg Brandl116aa622007-08-15 14:28:22 +0000105Tkinter Modules
106---------------
107
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700108Support for Tkinter is spread across several modules. Most applications will need the
109main :mod:`tkinter` module, as well as the :mod:`tkinter.ttk` module, which provides
110the modern themed widget set and API::
Georg Brandl116aa622007-08-15 14:28:22 +0000111
Georg Brandl116aa622007-08-15 14:28:22 +0000112
Georg Brandlac6060c2008-05-17 18:44:45 +0000113 from tkinter import *
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700114 from tkinter import ttk
Georg Brandl116aa622007-08-15 14:28:22 +0000115
116
117.. class:: Tk(screenName=None, baseName=None, className='Tk', useTk=1)
118
119 The :class:`Tk` class is instantiated without arguments. This creates a toplevel
120 widget of Tk which usually is the main window of an application. Each instance
121 has its own associated Tcl interpreter.
122
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000123 .. FIXME: The following keyword arguments are currently recognized:
Georg Brandl116aa622007-08-15 14:28:22 +0000124
Georg Brandl116aa622007-08-15 14:28:22 +0000125
126.. function:: Tcl(screenName=None, baseName=None, className='Tk', useTk=0)
127
128 The :func:`Tcl` function is a factory function which creates an object much like
129 that created by the :class:`Tk` class, except that it does not initialize the Tk
130 subsystem. This is most often useful when driving the Tcl interpreter in an
131 environment where one doesn't want to create extraneous toplevel windows, or
132 where one cannot (such as Unix/Linux systems without an X server). An object
133 created by the :func:`Tcl` object can have a Toplevel window created (and the Tk
134 subsystem initialized) by calling its :meth:`loadtk` method.
135
Georg Brandl116aa622007-08-15 14:28:22 +0000136
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700137The modules that provide Tk support include:
138
139:mod:`tkinter`
140 Main Tkinter module.
Georg Brandl116aa622007-08-15 14:28:22 +0000141
Georg Brandlac6060c2008-05-17 18:44:45 +0000142:mod:`tkinter.colorchooser`
Georg Brandl116aa622007-08-15 14:28:22 +0000143 Dialog to let the user choose a color.
144
Georg Brandlac6060c2008-05-17 18:44:45 +0000145:mod:`tkinter.commondialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000146 Base class for the dialogs defined in the other modules listed here.
147
Georg Brandlac6060c2008-05-17 18:44:45 +0000148:mod:`tkinter.filedialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000149 Common dialogs to allow the user to specify a file to open or save.
150
Georg Brandlac6060c2008-05-17 18:44:45 +0000151:mod:`tkinter.font`
Georg Brandl116aa622007-08-15 14:28:22 +0000152 Utilities to help work with fonts.
153
Georg Brandlac6060c2008-05-17 18:44:45 +0000154:mod:`tkinter.messagebox`
Georg Brandl116aa622007-08-15 14:28:22 +0000155 Access to standard Tk dialog boxes.
156
Nikhil80428ed2019-09-10 01:55:34 -0700157:mod:`tkinter.scrolledtext`
158 Text widget with a vertical scroll bar built in.
159
Georg Brandlac6060c2008-05-17 18:44:45 +0000160:mod:`tkinter.simpledialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000161 Basic dialogs and convenience functions.
162
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700163:mod:`tkinter.ttk`
164 Themed widget set introduced in Tk 8.5, providing modern alternatives
165 for many of the classic widgets in the main :mod:`tkinter` module.
166
167Additional modules:
168
169:mod:`_tkinter`
170 A binary module that contains the low-level interface to Tcl/Tk.
171 It is automatically imported by the main :mod:`tkinter` module,
172 and should never be used directly by application programmers.
173 It is usually a shared library (or DLL), but might in some cases be
174 statically linked with the Python interpreter.
175
176:mod:`idlelib`
177 Python's Integrated Development and Learning Environment (IDLE). Based
178 on :mod:`tkinter`.
179
180:mod:`tkinter.constants`
181 Symbolic constants that can be used in place of strings when passing
182 various parameters to Tkinter calls. Automatically imported by the
183 main :mod:`tkinter` module.
184
Georg Brandlac6060c2008-05-17 18:44:45 +0000185:mod:`tkinter.dnd`
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700186 (experimental) Drag-and-drop support for :mod:`tkinter`. This will
187 become deprecated when it is replaced with the Tk DND.
188
189:mod:`tkinter.tix`
190 (deprecated) An older third-party Tcl/Tk package that adds several new
191 widgets. Better alternatives for most can be found in :mod:`tkinter.ttk`.
Georg Brandl116aa622007-08-15 14:28:22 +0000192
Georg Brandl23d11d32008-09-21 07:50:52 +0000193:mod:`turtle`
Georg Brandl116aa622007-08-15 14:28:22 +0000194 Turtle graphics in a Tk window.
195
196
197Tkinter Life Preserver
198----------------------
199
200.. sectionauthor:: Matt Conway
201
202
203This section is not designed to be an exhaustive tutorial on either Tk or
204Tkinter. Rather, it is intended as a stop gap, providing some introductory
205orientation on the system.
206
Georg Brandl116aa622007-08-15 14:28:22 +0000207Credits:
208
Georg Brandl116aa622007-08-15 14:28:22 +0000209* Tk was written by John Ousterhout while at Berkeley.
210
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000211* Tkinter was written by Steen Lumholt and Guido van Rossum.
212
Georg Brandl116aa622007-08-15 14:28:22 +0000213* This Life Preserver was written by Matt Conway at the University of Virginia.
214
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000215* The HTML rendering, and some liberal editing, was produced from a FrameMaker
Georg Brandl116aa622007-08-15 14:28:22 +0000216 version by Ken Manheimer.
217
218* Fredrik Lundh elaborated and revised the class interface descriptions, to get
219 them current with Tk 4.2.
220
221* Mike Clarkson converted the documentation to LaTeX, and compiled the User
222 Interface chapter of the reference manual.
223
224
225How To Use This Section
226^^^^^^^^^^^^^^^^^^^^^^^
227
228This section is designed in two parts: the first half (roughly) covers
229background material, while the second half can be taken to the keyboard as a
230handy reference.
231
232When trying to answer questions of the form "how do I do blah", it is often best
Julien Palardae342cf2017-12-05 06:05:33 +0100233to find out how to do "blah" in straight Tk, and then convert this back into the
Georg Brandlac6060c2008-05-17 18:44:45 +0000234corresponding :mod:`tkinter` call. Python programmers can often guess at the
Georg Brandl116aa622007-08-15 14:28:22 +0000235correct Python command by looking at the Tk documentation. This means that in
236order to use Tkinter, you will have to know a little bit about Tk. This document
237can't fulfill that role, so the best we can do is point you to the best
238documentation that exists. Here are some hints:
239
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000240* The authors strongly suggest getting a copy of the Tk man pages.
241 Specifically, the man pages in the ``manN`` directory are most useful.
242 The ``man3`` man pages describe the C interface to the Tk library and thus
243 are not especially helpful for script writers.
Georg Brandl116aa622007-08-15 14:28:22 +0000244
245* Addison-Wesley publishes a book called Tcl and the Tk Toolkit by John
246 Ousterhout (ISBN 0-201-63337-X) which is a good introduction to Tcl and Tk for
247 the novice. The book is not exhaustive, and for many details it defers to the
248 man pages.
249
Georg Brandl48310cd2009-01-03 21:18:54 +0000250* :file:`tkinter/__init__.py` is a last resort for most, but can be a good
Georg Brandlac6060c2008-05-17 18:44:45 +0000251 place to go when nothing else makes sense.
Georg Brandl116aa622007-08-15 14:28:22 +0000252
253
Georg Brandl116aa622007-08-15 14:28:22 +0000254A Simple Hello World Program
255^^^^^^^^^^^^^^^^^^^^^^^^^^^^
256
Georg Brandl116aa622007-08-15 14:28:22 +0000257::
258
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700259 import tkinter as tk
Georg Brandl116aa622007-08-15 14:28:22 +0000260
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700261 class Application(tk.Frame):
262 def __init__(self, master=None):
Berker Peksag3093bf12016-07-14 07:32:43 +0300263 super().__init__(master)
Daniel Lovella80af772018-10-30 07:56:07 -0700264 self.master = master
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700265 self.pack()
Berker Peksag3093bf12016-07-14 07:32:43 +0300266 self.create_widgets()
Georg Brandl116aa622007-08-15 14:28:22 +0000267
Berker Peksag3093bf12016-07-14 07:32:43 +0300268 def create_widgets(self):
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700269 self.hi_there = tk.Button(self)
270 self.hi_there["text"] = "Hello World\n(click me)"
271 self.hi_there["command"] = self.say_hi
272 self.hi_there.pack(side="top")
Georg Brandl116aa622007-08-15 14:28:22 +0000273
Berker Peksag3093bf12016-07-14 07:32:43 +0300274 self.quit = tk.Button(self, text="QUIT", fg="red",
Daniel Lovella80af772018-10-30 07:56:07 -0700275 command=self.master.destroy)
Berker Peksag3093bf12016-07-14 07:32:43 +0300276 self.quit.pack(side="bottom")
Georg Brandl116aa622007-08-15 14:28:22 +0000277
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700278 def say_hi(self):
279 print("hi there, everyone!")
Georg Brandl116aa622007-08-15 14:28:22 +0000280
Andrew Svetlovd3d7c902012-03-14 21:41:23 -0700281 root = tk.Tk()
282 app = Application(master=root)
283 app.mainloop()
Georg Brandl116aa622007-08-15 14:28:22 +0000284
285
286A (Very) Quick Look at Tcl/Tk
287-----------------------------
288
289The class hierarchy looks complicated, but in actual practice, application
290programmers almost always refer to the classes at the very bottom of the
291hierarchy.
292
Georg Brandl116aa622007-08-15 14:28:22 +0000293Notes:
294
295* These classes are provided for the purposes of organizing certain functions
296 under one namespace. They aren't meant to be instantiated independently.
297
298* The :class:`Tk` class is meant to be instantiated only once in an application.
299 Application programmers need not instantiate one explicitly, the system creates
300 one whenever any of the other classes are instantiated.
301
302* The :class:`Widget` class is not meant to be instantiated, it is meant only
303 for subclassing to make "real" widgets (in C++, this is called an 'abstract
304 class').
305
306To make use of this reference material, there will be times when you will need
307to know how to read short passages of Tk and how to identify the various parts
308of a Tk command. (See section :ref:`tkinter-basic-mapping` for the
Georg Brandlac6060c2008-05-17 18:44:45 +0000309:mod:`tkinter` equivalents of what's below.)
Georg Brandl116aa622007-08-15 14:28:22 +0000310
311Tk scripts are Tcl programs. Like all Tcl programs, Tk scripts are just lists
312of tokens separated by spaces. A Tk widget is just its *class*, the *options*
313that help configure it, and the *actions* that make it do useful things.
314
315To make a widget in Tk, the command is always of the form::
316
317 classCommand newPathname options
318
319*classCommand*
320 denotes which kind of widget to make (a button, a label, a menu...)
321
Serhiy Storchaka913876d2018-10-28 13:41:26 +0200322.. index:: single: . (dot); in Tkinter
323
Georg Brandl116aa622007-08-15 14:28:22 +0000324*newPathname*
325 is the new name for this widget. All names in Tk must be unique. To help
326 enforce this, widgets in Tk are named with *pathnames*, just like files in a
327 file system. The top level widget, the *root*, is called ``.`` (period) and
328 children are delimited by more periods. For example,
329 ``.myApp.controlPanel.okButton`` might be the name of a widget.
330
331*options*
332 configure the widget's appearance and in some cases, its behavior. The options
333 come in the form of a list of flags and values. Flags are preceded by a '-',
334 like Unix shell command flags, and values are put in quotes if they are more
335 than one word.
336
337For example::
338
339 button .fred -fg red -text "hi there"
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000340 ^ ^ \______________________/
Georg Brandl116aa622007-08-15 14:28:22 +0000341 | | |
342 class new options
343 command widget (-opt val -opt val ...)
344
345Once created, the pathname to the widget becomes a new command. This new
346*widget command* is the programmer's handle for getting the new widget to
347perform some *action*. In C, you'd express this as someAction(fred,
348someOptions), in C++, you would express this as fred.someAction(someOptions),
349and in Tk, you say::
350
Georg Brandl48310cd2009-01-03 21:18:54 +0000351 .fred someAction someOptions
Georg Brandl116aa622007-08-15 14:28:22 +0000352
353Note that the object name, ``.fred``, starts with a dot.
354
355As you'd expect, the legal values for *someAction* will depend on the widget's
356class: ``.fred disable`` works if fred is a button (fred gets greyed out), but
357does not work if fred is a label (disabling of labels is not supported in Tk).
358
359The legal values of *someOptions* is action dependent. Some actions, like
360``disable``, require no arguments, others, like a text-entry box's ``delete``
361command, would need arguments to specify what range of text to delete.
362
363
364.. _tkinter-basic-mapping:
365
366Mapping Basic Tk into Tkinter
367-----------------------------
368
369Class commands in Tk correspond to class constructors in Tkinter. ::
370
371 button .fred =====> fred = Button()
372
373The master of an object is implicit in the new name given to it at creation
374time. In Tkinter, masters are specified explicitly. ::
375
376 button .panel.fred =====> fred = Button(panel)
377
378The configuration options in Tk are given in lists of hyphened tags followed by
379values. In Tkinter, options are specified as keyword-arguments in the instance
380constructor, and keyword-args for configure calls or as instance indices, in
381dictionary style, for established instances. See section
382:ref:`tkinter-setting-options` on setting options. ::
383
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000384 button .fred -fg red =====> fred = Button(panel, fg="red")
Georg Brandl116aa622007-08-15 14:28:22 +0000385 .fred configure -fg red =====> fred["fg"] = red
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000386 OR ==> fred.config(fg="red")
Georg Brandl116aa622007-08-15 14:28:22 +0000387
388In Tk, to perform an action on a widget, use the widget name as a command, and
389follow it with an action name, possibly with arguments (options). In Tkinter,
390you call methods on the class instance to invoke actions on the widget. The
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000391actions (methods) that a given widget can perform are listed in
392:file:`tkinter/__init__.py`. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000393
394 .fred invoke =====> fred.invoke()
395
396To give a widget to the packer (geometry manager), you call pack with optional
397arguments. In Tkinter, the Pack class holds all this functionality, and the
398various forms of the pack command are implemented as methods. All widgets in
Georg Brandlac6060c2008-05-17 18:44:45 +0000399:mod:`tkinter` are subclassed from the Packer, and so inherit all the packing
Georg Brandl48310cd2009-01-03 21:18:54 +0000400methods. See the :mod:`tkinter.tix` module documentation for additional
Georg Brandlac6060c2008-05-17 18:44:45 +0000401information on the Form geometry manager. ::
Georg Brandl116aa622007-08-15 14:28:22 +0000402
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000403 pack .fred -side left =====> fred.pack(side="left")
Georg Brandl116aa622007-08-15 14:28:22 +0000404
405
406How Tk and Tkinter are Related
407------------------------------
408
Georg Brandl116aa622007-08-15 14:28:22 +0000409From the top down:
410
411Your App Here (Python)
Georg Brandlac6060c2008-05-17 18:44:45 +0000412 A Python application makes a :mod:`tkinter` call.
Georg Brandl116aa622007-08-15 14:28:22 +0000413
Georg Brandlac6060c2008-05-17 18:44:45 +0000414tkinter (Python Package)
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000415 This call (say, for example, creating a button widget), is implemented in
416 the :mod:`tkinter` package, which is written in Python. This Python
417 function will parse the commands and the arguments and convert them into a
418 form that makes them look as if they had come from a Tk script instead of
419 a Python script.
Georg Brandl116aa622007-08-15 14:28:22 +0000420
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000421_tkinter (C)
Georg Brandl116aa622007-08-15 14:28:22 +0000422 These commands and their arguments will be passed to a C function in the
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000423 :mod:`_tkinter` - note the underscore - extension module.
Georg Brandl116aa622007-08-15 14:28:22 +0000424
425Tk Widgets (C and Tcl)
426 This C function is able to make calls into other C modules, including the C
427 functions that make up the Tk library. Tk is implemented in C and some Tcl.
428 The Tcl part of the Tk widgets is used to bind certain default behaviors to
Georg Brandlac6060c2008-05-17 18:44:45 +0000429 widgets, and is executed once at the point where the Python :mod:`tkinter`
430 package is imported. (The user never sees this stage).
Georg Brandl116aa622007-08-15 14:28:22 +0000431
432Tk (C)
433 The Tk part of the Tk Widgets implement the final mapping to ...
434
435Xlib (C)
436 the Xlib library to draw graphics on the screen.
437
438
Miss Islington (bot)2666d702021-08-11 10:16:10 -0700439Threading model
440---------------
441
442Python and Tcl/Tk have very different threading models, which :mod:`tkinter`
443tries to bridge. If you use threads, you may need to be aware of this.
444
445A Python interpreter may have many threads associated with it. In Tcl, multiple
446threads can be created, but each thread has a separate Tcl interpreter instance
447associated with it. Threads can also create more than one interpreter instance,
448though each interpreter instance can be used only by the one thread that created it.
449
450Each :class:`Tk` object created by :mod:`tkinter` contains a Tcl interpreter.
451It also keeps track of which thread created that interpreter. Calls to
452:mod:`tkinter` can be made from any Python thread. Internally, if a call comes
453from a thread other than the one that created the :class:`Tk` object, an event
454is posted to the interpreter's event queue, and when executed, the result is
455returned to the calling Python thread.
456
457Tcl/Tk applications are normally event-driven, meaning that after initialization,
458the interpreter runs an event loop (i.e. :func:`Tk.mainloop`) and responds to events.
459Because it is single-threaded, event handlers must respond quickly, otherwise they
460will block other events from being processed. To avoid this, any long-running
461computations should not run in an event handler, but are either broken into smaller
462pieces using timers, or run in another thread. This is different from many GUI
463toolkits where the GUI runs in a completely separate thread from all application
464code including event handlers.
465
466If the Tcl interpreter is not running the event loop and processing events, any
467:mod:`tkinter` calls made from threads other than the one running the Tcl
468interpreter will fail.
469
470A number of special cases exist:
471
472 * Tcl/Tk libraries can be built so they are not thread-aware. In this case,
473 :mod:`tkinter` calls the library from the originating Python thread, even
474 if this is different than the thread that created the Tcl interpreter. A global
475 lock ensures only one call occurs at a time.
476
477 * While :mod:`tkinter` allows you to create more than one instance of a :class:`Tk`
478 object (with its own interpreter), all interpreters that are part of the same
479 thread share a common event queue, which gets ugly fast. In practice, don't create
480 more than one instance of :class:`Tk` at a time. Otherwise, it's best to create
481 them in separate threads and ensure you're running a thread-aware Tcl/Tk build.
482
483 * Blocking event handlers are not the only way to prevent the Tcl interpreter from
484 reentering the event loop. It is even possible to run multiple nested event loops
485 or abandon the event loop entirely. If you're doing anything tricky when it comes
486 to events or threads, be aware of these possibilities.
487
488 * There are a few select :mod:`tkinter` functions that presently work only when
489 called from the thread that created the Tcl interpreter.
490
491
Georg Brandl116aa622007-08-15 14:28:22 +0000492Handy Reference
493---------------
494
495
496.. _tkinter-setting-options:
497
498Setting Options
499^^^^^^^^^^^^^^^
500
501Options control things like the color and border width of a widget. Options can
502be set in three ways:
503
504At object creation time, using keyword arguments
505 ::
506
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000507 fred = Button(self, fg="red", bg="blue")
Georg Brandl116aa622007-08-15 14:28:22 +0000508
509After object creation, treating the option name like a dictionary index
510 ::
511
512 fred["fg"] = "red"
513 fred["bg"] = "blue"
514
515Use the config() method to update multiple attrs subsequent to object creation
516 ::
517
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000518 fred.config(fg="red", bg="blue")
Georg Brandl116aa622007-08-15 14:28:22 +0000519
520For a complete explanation of a given option and its behavior, see the Tk man
521pages for the widget in question.
522
523Note that the man pages list "STANDARD OPTIONS" and "WIDGET SPECIFIC OPTIONS"
524for each widget. The former is a list of options that are common to many
525widgets, the latter are the options that are idiosyncratic to that particular
526widget. The Standard Options are documented on the :manpage:`options(3)` man
527page.
528
529No distinction between standard and widget-specific options is made in this
530document. Some options don't apply to some kinds of widgets. Whether a given
531widget responds to a particular option depends on the class of the widget;
532buttons have a ``command`` option, labels do not.
533
534The options supported by a given widget are listed in that widget's man page, or
535can be queried at runtime by calling the :meth:`config` method without
536arguments, or by calling the :meth:`keys` method on that widget. The return
537value of these calls is a dictionary whose key is the name of the option as a
538string (for example, ``'relief'``) and whose values are 5-tuples.
539
540Some options, like ``bg`` are synonyms for common options with long names
541(``bg`` is shorthand for "background"). Passing the ``config()`` method the name
542of a shorthand option will return a 2-tuple, not 5-tuple. The 2-tuple passed
543back will contain the name of the synonym and the "real" option (such as
544``('bg', 'background')``).
545
546+-------+---------------------------------+--------------+
547| Index | Meaning | Example |
548+=======+=================================+==============+
549| 0 | option name | ``'relief'`` |
550+-------+---------------------------------+--------------+
551| 1 | option name for database lookup | ``'relief'`` |
552+-------+---------------------------------+--------------+
553| 2 | option class for database | ``'Relief'`` |
554| | lookup | |
555+-------+---------------------------------+--------------+
556| 3 | default value | ``'raised'`` |
557+-------+---------------------------------+--------------+
558| 4 | current value | ``'groove'`` |
559+-------+---------------------------------+--------------+
560
561Example::
562
Collin Winterc79461b2007-09-01 23:34:30 +0000563 >>> print(fred.config())
Serhiy Storchakaf47036c2013-12-24 11:04:36 +0200564 {'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}
Georg Brandl116aa622007-08-15 14:28:22 +0000565
566Of course, the dictionary printed will include all the options available and
567their values. This is meant only as an example.
568
569
570The Packer
571^^^^^^^^^^
572
573.. index:: single: packing (widgets)
574
Georg Brandl116aa622007-08-15 14:28:22 +0000575The packer is one of Tk's geometry-management mechanisms. Geometry managers
Nathan Mecaf9492020-08-02 22:13:03 -0400576are used to specify the relative positioning of widgets within their container -
577their mutual *master*. In contrast to the more cumbersome *placer* (which is
578used less commonly, and we do not cover here), the packer takes qualitative
579relationship specification - *above*, *to the left of*, *filling*, etc - and
580works everything out to determine the exact placement coordinates for you.
Georg Brandl116aa622007-08-15 14:28:22 +0000581
Georg Brandl116aa622007-08-15 14:28:22 +0000582The size of any *master* widget is determined by the size of the "slave widgets"
583inside. The packer is used to control where slave widgets appear inside the
584master into which they are packed. You can pack widgets into frames, and frames
585into other frames, in order to achieve the kind of layout you desire.
586Additionally, the arrangement is dynamically adjusted to accommodate incremental
587changes to the configuration, once it is packed.
588
589Note that widgets do not appear until they have had their geometry specified
590with a geometry manager. It's a common early mistake to leave out the geometry
591specification, and then be surprised when the widget is created but nothing
592appears. A widget will appear only after it has had, for example, the packer's
593:meth:`pack` method applied to it.
594
595The pack() method can be called with keyword-option/value pairs that control
596where the widget is to appear within its container, and how it is to behave when
597the main application window is resized. Here are some examples::
598
599 fred.pack() # defaults to side = "top"
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000600 fred.pack(side="left")
601 fred.pack(expand=1)
Georg Brandl116aa622007-08-15 14:28:22 +0000602
603
604Packer Options
605^^^^^^^^^^^^^^
606
607For more extensive information on the packer and the options that it can take,
608see the man pages and page 183 of John Ousterhout's book.
609
Georg Brandl48310cd2009-01-03 21:18:54 +0000610anchor
Georg Brandl116aa622007-08-15 14:28:22 +0000611 Anchor type. Denotes where the packer is to place each slave in its parcel.
612
613expand
614 Boolean, ``0`` or ``1``.
615
616fill
617 Legal values: ``'x'``, ``'y'``, ``'both'``, ``'none'``.
618
619ipadx and ipady
620 A distance - designating internal padding on each side of the slave widget.
621
622padx and pady
623 A distance - designating external padding on each side of the slave widget.
624
625side
626 Legal values are: ``'left'``, ``'right'``, ``'top'``, ``'bottom'``.
627
628
629Coupling Widget Variables
630^^^^^^^^^^^^^^^^^^^^^^^^^
631
632The current-value setting of some widgets (like text entry widgets) can be
633connected directly to application variables by using special options. These
634options are ``variable``, ``textvariable``, ``onvalue``, ``offvalue``, and
635``value``. This connection works both ways: if the variable changes for any
636reason, the widget it's connected to will be updated to reflect the new value.
637
Georg Brandlac6060c2008-05-17 18:44:45 +0000638Unfortunately, in the current implementation of :mod:`tkinter` it is not
Georg Brandl116aa622007-08-15 14:28:22 +0000639possible to hand over an arbitrary Python variable to a widget through a
640``variable`` or ``textvariable`` option. The only kinds of variables for which
641this works are variables that are subclassed from a class called Variable,
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000642defined in :mod:`tkinter`.
Georg Brandl116aa622007-08-15 14:28:22 +0000643
644There are many useful subclasses of Variable already defined:
645:class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and
646:class:`BooleanVar`. To read the current value of such a variable, call the
Georg Brandl502d9a52009-07-26 15:02:41 +0000647:meth:`get` method on it, and to change its value you call the :meth:`!set`
Georg Brandl116aa622007-08-15 14:28:22 +0000648method. If you follow this protocol, the widget will always track the value of
649the variable, with no further intervention on your part.
650
651For example::
652
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100653 import tkinter as tk
654
655 class App(tk.Frame):
656 def __init__(self, master):
Berker Peksag3093bf12016-07-14 07:32:43 +0300657 super().__init__(master)
Georg Brandl116aa622007-08-15 14:28:22 +0000658 self.pack()
659
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100660 self.entrythingy = tk.Entry()
Georg Brandl116aa622007-08-15 14:28:22 +0000661 self.entrythingy.pack()
662
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100663 # Create the application variable.
664 self.contents = tk.StringVar()
665 # Set it to some value.
Georg Brandl116aa622007-08-15 14:28:22 +0000666 self.contents.set("this is a variable")
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100667 # Tell the entry widget to watch this variable.
Georg Brandl116aa622007-08-15 14:28:22 +0000668 self.entrythingy["textvariable"] = self.contents
669
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100670 # Define a callback for when the user hits return.
671 # It prints the current value of the variable.
Georg Brandl116aa622007-08-15 14:28:22 +0000672 self.entrythingy.bind('<Key-Return>',
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100673 self.print_contents)
Georg Brandl116aa622007-08-15 14:28:22 +0000674
675 def print_contents(self, event):
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100676 print("Hi. The current entry content is:",
Collin Winterc79461b2007-09-01 23:34:30 +0000677 self.contents.get())
Georg Brandl116aa622007-08-15 14:28:22 +0000678
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100679 root = tk.Tk()
680 myapp = App(root)
681 myapp.mainloop()
Georg Brandl116aa622007-08-15 14:28:22 +0000682
683The Window Manager
684^^^^^^^^^^^^^^^^^^
685
686.. index:: single: window manager (widgets)
687
Georg Brandl116aa622007-08-15 14:28:22 +0000688In Tk, there is a utility command, ``wm``, for interacting with the window
689manager. Options to the ``wm`` command allow you to control things like titles,
Georg Brandlac6060c2008-05-17 18:44:45 +0000690placement, icon bitmaps, and the like. In :mod:`tkinter`, these commands have
Georg Brandl116aa622007-08-15 14:28:22 +0000691been implemented as methods on the :class:`Wm` class. Toplevel widgets are
692subclassed from the :class:`Wm` class, and so can call the :class:`Wm` methods
693directly.
694
695To get at the toplevel window that contains a given widget, you can often just
696refer to the widget's master. Of course if the widget has been packed inside of
697a frame, the master won't represent a toplevel window. To get at the toplevel
698window that contains an arbitrary widget, you can call the :meth:`_root` method.
699This method begins with an underscore to denote the fact that this function is
700part of the implementation, and not an interface to Tk functionality.
701
Georg Brandl116aa622007-08-15 14:28:22 +0000702Here are some examples of typical usage::
703
Berker Peksag3093bf12016-07-14 07:32:43 +0300704 import tkinter as tk
Georg Brandl116aa622007-08-15 14:28:22 +0000705
Berker Peksag3093bf12016-07-14 07:32:43 +0300706 class App(tk.Frame):
707 def __init__(self, master=None):
708 super().__init__(master)
709 self.pack()
Georg Brandl116aa622007-08-15 14:28:22 +0000710
711 # create the application
712 myapp = App()
713
714 #
715 # here are method calls to the window manager class
716 #
717 myapp.master.title("My Do-Nothing Application")
718 myapp.master.maxsize(1000, 400)
719
720 # start the program
721 myapp.mainloop()
722
723
724Tk Option Data Types
725^^^^^^^^^^^^^^^^^^^^
726
727.. index:: single: Tk Option Data Types
728
Georg Brandl116aa622007-08-15 14:28:22 +0000729anchor
730 Legal values are points of the compass: ``"n"``, ``"ne"``, ``"e"``, ``"se"``,
731 ``"s"``, ``"sw"``, ``"w"``, ``"nw"``, and also ``"center"``.
732
733bitmap
734 There are eight built-in, named bitmaps: ``'error'``, ``'gray25'``,
735 ``'gray50'``, ``'hourglass'``, ``'info'``, ``'questhead'``, ``'question'``,
736 ``'warning'``. To specify an X bitmap filename, give the full path to the file,
737 preceded with an ``@``, as in ``"@/usr/contrib/bitmap/gumby.bit"``.
738
739boolean
Serhiy Storchakaa4d170d2013-12-23 18:20:51 +0200740 You can pass integers 0 or 1 or the strings ``"yes"`` or ``"no"``.
Georg Brandl116aa622007-08-15 14:28:22 +0000741
742callback
743 This is any Python function that takes no arguments. For example::
744
745 def print_it():
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000746 print("hi there")
Georg Brandl116aa622007-08-15 14:28:22 +0000747 fred["command"] = print_it
748
749color
750 Colors can be given as the names of X colors in the rgb.txt file, or as strings
751 representing RGB values in 4 bit: ``"#RGB"``, 8 bit: ``"#RRGGBB"``, 12 bit"
752 ``"#RRRGGGBBB"``, or 16 bit ``"#RRRRGGGGBBBB"`` ranges, where R,G,B here
753 represent any legal hex digit. See page 160 of Ousterhout's book for details.
754
755cursor
756 The standard X cursor names from :file:`cursorfont.h` can be used, without the
757 ``XC_`` prefix. For example to get a hand cursor (:const:`XC_hand2`), use the
758 string ``"hand2"``. You can also specify a bitmap and mask file of your own.
759 See page 179 of Ousterhout's book.
760
761distance
762 Screen distances can be specified in either pixels or absolute distances.
763 Pixels are given as numbers and absolute distances as strings, with the trailing
764 character denoting units: ``c`` for centimetres, ``i`` for inches, ``m`` for
765 millimetres, ``p`` for printer's points. For example, 3.5 inches is expressed
766 as ``"3.5i"``.
767
768font
769 Tk uses a list font name format, such as ``{courier 10 bold}``. Font sizes with
770 positive numbers are measured in points; sizes with negative numbers are
771 measured in pixels.
772
773geometry
774 This is a string of the form ``widthxheight``, where width and height are
775 measured in pixels for most widgets (in characters for widgets displaying text).
776 For example: ``fred["geometry"] = "200x100"``.
777
778justify
779 Legal values are the strings: ``"left"``, ``"center"``, ``"right"``, and
780 ``"fill"``.
781
782region
783 This is a string with four space-delimited elements, each of which is a legal
784 distance (see above). For example: ``"2 3 4 5"`` and ``"3i 2i 4.5i 2i"`` and
785 ``"3c 2c 4c 10.43c"`` are all legal regions.
786
787relief
788 Determines what the border style of a widget will be. Legal values are:
789 ``"raised"``, ``"sunken"``, ``"flat"``, ``"groove"``, and ``"ridge"``.
790
791scrollcommand
Georg Brandl502d9a52009-07-26 15:02:41 +0000792 This is almost always the :meth:`!set` method of some scrollbar widget, but can
Georg Brandl59b44722010-12-30 22:12:40 +0000793 be any widget method that takes a single argument.
Georg Brandl116aa622007-08-15 14:28:22 +0000794
Nikhil80428ed2019-09-10 01:55:34 -0700795wrap
Georg Brandl116aa622007-08-15 14:28:22 +0000796 Must be one of: ``"none"``, ``"char"``, or ``"word"``.
797
Nikhil80428ed2019-09-10 01:55:34 -0700798.. _Bindings-and-Events:
Georg Brandl116aa622007-08-15 14:28:22 +0000799
800Bindings and Events
801^^^^^^^^^^^^^^^^^^^
802
803.. index::
804 single: bind (widgets)
805 single: events (widgets)
806
Georg Brandl116aa622007-08-15 14:28:22 +0000807The bind method from the widget command allows you to watch for certain events
808and to have a callback function trigger when that event type occurs. The form
809of the bind method is::
810
811 def bind(self, sequence, func, add=''):
812
813where:
814
815sequence
816 is a string that denotes the target kind of event. (See the bind man page and
817 page 201 of John Ousterhout's book for details).
818
819func
820 is a Python function, taking one argument, to be invoked when the event occurs.
821 An Event instance will be passed as the argument. (Functions deployed this way
822 are commonly known as *callbacks*.)
823
824add
825 is optional, either ``''`` or ``'+'``. Passing an empty string denotes that
826 this binding is to replace any other bindings that this event is associated
827 with. Passing a ``'+'`` means that this function is to be added to the list
828 of functions bound to this event type.
829
830For example::
831
Berker Peksag3093bf12016-07-14 07:32:43 +0300832 def turn_red(self, event):
Georg Brandl116aa622007-08-15 14:28:22 +0000833 event.widget["activeforeground"] = "red"
834
Berker Peksag3093bf12016-07-14 07:32:43 +0300835 self.button.bind("<Enter>", self.turn_red)
Georg Brandl116aa622007-08-15 14:28:22 +0000836
837Notice how the widget field of the event is being accessed in the
Berker Peksag3093bf12016-07-14 07:32:43 +0300838``turn_red()`` callback. This field contains the widget that caught the X
Georg Brandl116aa622007-08-15 14:28:22 +0000839event. The following table lists the other event fields you can access, and how
840they are denoted in Tk, which can be useful when referring to the Tk man pages.
Georg Brandl116aa622007-08-15 14:28:22 +0000841
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000842+----+---------------------+----+---------------------+
843| Tk | Tkinter Event Field | Tk | Tkinter Event Field |
844+====+=====================+====+=====================+
845| %f | focus | %A | char |
846+----+---------------------+----+---------------------+
847| %h | height | %E | send_event |
848+----+---------------------+----+---------------------+
849| %k | keycode | %K | keysym |
850+----+---------------------+----+---------------------+
851| %s | state | %N | keysym_num |
852+----+---------------------+----+---------------------+
853| %t | time | %T | type |
854+----+---------------------+----+---------------------+
855| %w | width | %W | widget |
856+----+---------------------+----+---------------------+
857| %x | x | %X | x_root |
858+----+---------------------+----+---------------------+
859| %y | y | %Y | y_root |
860+----+---------------------+----+---------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000861
862
863The index Parameter
864^^^^^^^^^^^^^^^^^^^
865
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000866A number of widgets require "index" parameters to be passed. These are used to
Georg Brandl116aa622007-08-15 14:28:22 +0000867point at a specific place in a Text widget, or to particular characters in an
868Entry widget, or to particular menu items in a Menu widget.
869
Georg Brandl116aa622007-08-15 14:28:22 +0000870Entry widget indexes (index, view index, etc.)
871 Entry widgets have options that refer to character positions in the text being
Georg Brandlac6060c2008-05-17 18:44:45 +0000872 displayed. You can use these :mod:`tkinter` functions to access these special
Georg Brandl116aa622007-08-15 14:28:22 +0000873 points in text widgets:
874
Georg Brandl116aa622007-08-15 14:28:22 +0000875Text widget indexes
876 The index notation for Text widgets is very rich and is best described in the Tk
877 man pages.
878
879Menu indexes (menu.invoke(), menu.entryconfig(), etc.)
880 Some options and methods for menus manipulate specific menu entries. Anytime a
881 menu index is needed for an option or a parameter, you may pass in:
882
883 * an integer which refers to the numeric position of the entry in the widget,
884 counted from the top, starting with 0;
885
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000886 * the string ``"active"``, which refers to the menu position that is currently
Georg Brandl116aa622007-08-15 14:28:22 +0000887 under the cursor;
888
889 * the string ``"last"`` which refers to the last menu item;
890
891 * An integer preceded by ``@``, as in ``@6``, where the integer is interpreted
892 as a y pixel coordinate in the menu's coordinate system;
893
894 * the string ``"none"``, which indicates no menu entry at all, most often used
895 with menu.activate() to deactivate all entries, and finally,
896
897 * a text string that is pattern matched against the label of the menu entry, as
898 scanned from the top of the menu to the bottom. Note that this index type is
899 considered after all the others, which means that matches for menu items
900 labelled ``last``, ``active``, or ``none`` may be interpreted as the above
901 literals, instead.
902
903
904Images
905^^^^^^
906
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300907Images of different formats can be created through the corresponding subclass
908of :class:`tkinter.Image`:
Georg Brandl116aa622007-08-15 14:28:22 +0000909
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300910* :class:`BitmapImage` for images in XBM format.
Georg Brandl116aa622007-08-15 14:28:22 +0000911
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300912* :class:`PhotoImage` for images in PGM, PPM, GIF and PNG formats. The latter
913 is supported starting with Tk 8.6.
Georg Brandl116aa622007-08-15 14:28:22 +0000914
915Either type of image is created through either the ``file`` or the ``data``
916option (other options are available as well).
917
918The image object can then be used wherever an ``image`` option is supported by
919some widget (e.g. labels, buttons, menus). In these cases, Tk will not keep a
920reference to the image. When the last Python reference to the image object is
921deleted, the image data is deleted as well, and Tk will display an empty box
922wherever the image was used.
Terry Jan Reedyd9865632015-05-17 14:49:26 -0400923
Andrés Delfinob81ca282018-04-21 09:17:26 -0300924.. seealso::
925
926 The `Pillow <http://python-pillow.org/>`_ package adds support for
927 formats such as BMP, JPEG, TIFF, and WebP, among others.
Terry Jan Reedyd9865632015-05-17 14:49:26 -0400928
929.. _tkinter-file-handlers:
930
931File Handlers
932-------------
933
934Tk allows you to register and unregister a callback function which will be
935called from the Tk mainloop when I/O is possible on a file descriptor.
936Only one handler may be registered per file descriptor. Example code::
937
938 import tkinter
939 widget = tkinter.Tk()
940 mask = tkinter.READABLE | tkinter.WRITABLE
941 widget.tk.createfilehandler(file, mask, callback)
942 ...
943 widget.tk.deletefilehandler(file)
944
945This feature is not available on Windows.
946
947Since you don't know how many bytes are available for reading, you may not
948want to use the :class:`~io.BufferedIOBase` or :class:`~io.TextIOBase`
949:meth:`~io.BufferedIOBase.read` or :meth:`~io.IOBase.readline` methods,
950since these will insist on reading a predefined number of bytes.
951For sockets, the :meth:`~socket.socket.recv` or
952:meth:`~socket.socket.recvfrom` methods will work fine; for other files,
953use raw reads or ``os.read(file.fileno(), maxbytecount)``.
954
955
956.. method:: Widget.tk.createfilehandler(file, mask, func)
957
958 Registers the file handler callback function *func*. The *file* argument
959 may either be an object with a :meth:`~io.IOBase.fileno` method (such as
960 a file or socket object), or an integer file descriptor. The *mask*
961 argument is an ORed combination of any of the three constants below.
962 The callback is called as follows::
963
964 callback(file, mask)
965
966
967.. method:: Widget.tk.deletefilehandler(file)
968
969 Unregisters a file handler.
970
971
972.. data:: READABLE
973 WRITABLE
974 EXCEPTION
975
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100976 Constants used in the *mask* arguments.