blob: 65395d824cab7685a4976844c3e47d83cc3e7d76 [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
Miss Islington (bot)8351df62021-08-23 12:22:29 -070032.. 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
Georg Brandl116aa622007-08-15 14:28:22 +000039.. seealso::
40
Łukasz Langa8e90f152021-08-22 21:04:57 +020041 * `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.
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030044
Łukasz Langa8e90f152021-08-22 21:04:57 +020045 * `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.
Georg Brandl116aa622007-08-15 14:28:22 +000047
Łukasz Langa8e90f152021-08-22 21:04:57 +020048 Tcl/Tk Resources:
Andrew Svetlove708a8a2012-07-26 17:02:57 +030049
Łukasz Langa8e90f152021-08-22 21:04:57 +020050 * `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.
Andrew Svetlove708a8a2012-07-26 17:02:57 +030052
Łukasz Langa8e90f152021-08-22 21:04:57 +020053 * `Tcl/Tk Home Page <https://www.tcl.tk>`_
54 Additional documentation, and links to Tcl/Tk core development.
Andrew Svetlove708a8a2012-07-26 17:02:57 +030055
Łukasz Langa8e90f152021-08-22 21:04:57 +020056 Books:
Andrew Svetlove708a8a2012-07-26 17:02:57 +030057
Łukasz Langa8e90f152021-08-22 21:04:57 +020058 * `Modern Tkinter for Busy Python Developers <https://tkdocs.com/book.html>`_
59 By Mark Roseman. (ISBN 978-1999149567)
Andrew Svetlove708a8a2012-07-26 17:02:57 +030060
Łukasz Langa8e90f152021-08-22 21:04:57 +020061 * `Python and Tkinter Programming <https://www.packtpub.com/product/python-gui-programming-with-tkinter/9781788835886>`_
62 By Alan Moore. (ISBN 978-1788835886)
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030063
Łukasz Langa8e90f152021-08-22 21:04:57 +020064 * `Programming Python <http://learning-python.com/about-pp4e.html>`_
65 By Mark Lutz; has excellent coverage of Tkinter. (ISBN 978-0596158101)
Andrés Delfino67a8f4f2018-04-25 14:53:58 -030066
Łukasz Langa8e90f152021-08-22 21:04:57 +020067 * `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)
Georg Brandl116aa622007-08-15 14:28:22 +000069
70
Miss Islington (bot)2666d702021-08-11 10:16:10 -070071Architecture
72------------
73
74Tcl/Tk is not a single library but rather consists of a few distinct
Miss Islington (bot)e4795102021-08-23 13:08:19 -070075modules, each with separate functionality and its own official
Miss Islington (bot)2666d702021-08-11 10:16:10 -070076documentation. 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
Miss Islington (bot)e4795102021-08-23 13:08:19 -0700105Internally, 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.
Miss Islington (bot)2666d702021-08-11 10:16:10 -0700113
114
Georg Brandl116aa622007-08-15 14:28:22 +0000115Tkinter Modules
116---------------
117
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700118Support 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::
Georg Brandl116aa622007-08-15 14:28:22 +0000121
Georg Brandl116aa622007-08-15 14:28:22 +0000122
Georg Brandlac6060c2008-05-17 18:44:45 +0000123 from tkinter import *
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700124 from tkinter import ttk
Georg Brandl116aa622007-08-15 14:28:22 +0000125
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
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000133 .. FIXME: The following keyword arguments are currently recognized:
Georg Brandl116aa622007-08-15 14:28:22 +0000134
Georg Brandl116aa622007-08-15 14:28:22 +0000135
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
Georg Brandl116aa622007-08-15 14:28:22 +0000146
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700147The modules that provide Tk support include:
148
149:mod:`tkinter`
150 Main Tkinter module.
Georg Brandl116aa622007-08-15 14:28:22 +0000151
Georg Brandlac6060c2008-05-17 18:44:45 +0000152:mod:`tkinter.colorchooser`
Georg Brandl116aa622007-08-15 14:28:22 +0000153 Dialog to let the user choose a color.
154
Georg Brandlac6060c2008-05-17 18:44:45 +0000155:mod:`tkinter.commondialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000156 Base class for the dialogs defined in the other modules listed here.
157
Georg Brandlac6060c2008-05-17 18:44:45 +0000158:mod:`tkinter.filedialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000159 Common dialogs to allow the user to specify a file to open or save.
160
Georg Brandlac6060c2008-05-17 18:44:45 +0000161:mod:`tkinter.font`
Georg Brandl116aa622007-08-15 14:28:22 +0000162 Utilities to help work with fonts.
163
Georg Brandlac6060c2008-05-17 18:44:45 +0000164:mod:`tkinter.messagebox`
Georg Brandl116aa622007-08-15 14:28:22 +0000165 Access to standard Tk dialog boxes.
166
Nikhil80428ed2019-09-10 01:55:34 -0700167:mod:`tkinter.scrolledtext`
168 Text widget with a vertical scroll bar built in.
169
Georg Brandlac6060c2008-05-17 18:44:45 +0000170:mod:`tkinter.simpledialog`
Georg Brandl116aa622007-08-15 14:28:22 +0000171 Basic dialogs and convenience functions.
172
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700173: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
Georg Brandlac6060c2008-05-17 18:44:45 +0000195:mod:`tkinter.dnd`
Miss Islington (bot)4d1e74f2021-08-22 12:04:24 -0700196 (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`.
Georg Brandl116aa622007-08-15 14:28:22 +0000202
Georg Brandl23d11d32008-09-21 07:50:52 +0000203:mod:`turtle`
Georg Brandl116aa622007-08-15 14:28:22 +0000204 Turtle graphics in a Tk window.
205
206
207Tkinter Life Preserver
208----------------------
209
Georg Brandl116aa622007-08-15 14:28:22 +0000210This section is not designed to be an exhaustive tutorial on either Tk or
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700211Tkinter. 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000215
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700216The 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000220
221
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700222A Hello World Program
223^^^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000224
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700225We'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.
Georg Brandl116aa622007-08-15 14:28:22 +0000228
Georg Brandl116aa622007-08-15 14:28:22 +0000229::
230
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700231 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()
Georg Brandl116aa622007-08-15 14:28:22 +0000239
240
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700241After 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000245
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700246The 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000249
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700250The 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000253
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700254A 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000256
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700257Finally, the :meth:`mainloop` method puts everything on the display, and
258responds to user input until the program terminates.
Georg Brandl116aa622007-08-15 14:28:22 +0000259
260
Georg Brandl116aa622007-08-15 14:28:22 +0000261
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700262Important Tk Concepts
263^^^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000264
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700265Even this simple program illustrates the following key Tk concepts:
Georg Brandl116aa622007-08-15 14:28:22 +0000266
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700267widgets
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`.
Georg Brandl116aa622007-08-15 14:28:22 +0000271
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700272widget 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000277
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700278configuration 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000282
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700283geometry 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000287
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700288event 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000292
Georg Brandl116aa622007-08-15 14:28:22 +0000293
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700294Understanding How Tkinter Wraps Tcl/Tk
295^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Georg Brandl116aa622007-08-15 14:28:22 +0000296
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700297When 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000301
Miss Islington (bot)4673dc22021-08-23 15:52:02 -0700302Whether 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).
Georg Brandl116aa622007-08-15 14:28:22 +0000445
446
Miss Islington (bot)2666d702021-08-11 10:16:10 -0700447Threading 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
Georg Brandl116aa622007-08-15 14:28:22 +0000500Handy 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
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000515 fred = Button(self, fg="red", bg="blue")
Georg Brandl116aa622007-08-15 14:28:22 +0000516
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
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000526 fred.config(fg="red", bg="blue")
Georg Brandl116aa622007-08-15 14:28:22 +0000527
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
Collin Winterc79461b2007-09-01 23:34:30 +0000571 >>> print(fred.config())
Serhiy Storchakaf47036c2013-12-24 11:04:36 +0200572 {'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}
Georg Brandl116aa622007-08-15 14:28:22 +0000573
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
Georg Brandl116aa622007-08-15 14:28:22 +0000583The packer is one of Tk's geometry-management mechanisms. Geometry managers
Nathan Mecaf9492020-08-02 22:13:03 -0400584are 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000589
Georg Brandl116aa622007-08-15 14:28:22 +0000590The 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"
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000608 fred.pack(side="left")
609 fred.pack(expand=1)
Georg Brandl116aa622007-08-15 14:28:22 +0000610
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
Georg Brandl48310cd2009-01-03 21:18:54 +0000618anchor
Georg Brandl116aa622007-08-15 14:28:22 +0000619 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
Georg Brandlac6060c2008-05-17 18:44:45 +0000646Unfortunately, in the current implementation of :mod:`tkinter` it is not
Georg Brandl116aa622007-08-15 14:28:22 +0000647possible 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,
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000650defined in :mod:`tkinter`.
Georg Brandl116aa622007-08-15 14:28:22 +0000651
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
Georg Brandl502d9a52009-07-26 15:02:41 +0000655:meth:`get` method on it, and to change its value you call the :meth:`!set`
Georg Brandl116aa622007-08-15 14:28:22 +0000656method. 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
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100661 import tkinter as tk
662
663 class App(tk.Frame):
664 def __init__(self, master):
Berker Peksag3093bf12016-07-14 07:32:43 +0300665 super().__init__(master)
Georg Brandl116aa622007-08-15 14:28:22 +0000666 self.pack()
667
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100668 self.entrythingy = tk.Entry()
Georg Brandl116aa622007-08-15 14:28:22 +0000669 self.entrythingy.pack()
670
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100671 # Create the application variable.
672 self.contents = tk.StringVar()
673 # Set it to some value.
Georg Brandl116aa622007-08-15 14:28:22 +0000674 self.contents.set("this is a variable")
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100675 # Tell the entry widget to watch this variable.
Georg Brandl116aa622007-08-15 14:28:22 +0000676 self.entrythingy["textvariable"] = self.contents
677
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100678 # Define a callback for when the user hits return.
679 # It prints the current value of the variable.
Georg Brandl116aa622007-08-15 14:28:22 +0000680 self.entrythingy.bind('<Key-Return>',
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100681 self.print_contents)
Georg Brandl116aa622007-08-15 14:28:22 +0000682
683 def print_contents(self, event):
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100684 print("Hi. The current entry content is:",
Collin Winterc79461b2007-09-01 23:34:30 +0000685 self.contents.get())
Georg Brandl116aa622007-08-15 14:28:22 +0000686
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100687 root = tk.Tk()
688 myapp = App(root)
689 myapp.mainloop()
Georg Brandl116aa622007-08-15 14:28:22 +0000690
691The Window Manager
692^^^^^^^^^^^^^^^^^^
693
694.. index:: single: window manager (widgets)
695
Georg Brandl116aa622007-08-15 14:28:22 +0000696In 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,
Georg Brandlac6060c2008-05-17 18:44:45 +0000698placement, icon bitmaps, and the like. In :mod:`tkinter`, these commands have
Georg Brandl116aa622007-08-15 14:28:22 +0000699been 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
Georg Brandl116aa622007-08-15 14:28:22 +0000710Here are some examples of typical usage::
711
Berker Peksag3093bf12016-07-14 07:32:43 +0300712 import tkinter as tk
Georg Brandl116aa622007-08-15 14:28:22 +0000713
Berker Peksag3093bf12016-07-14 07:32:43 +0300714 class App(tk.Frame):
715 def __init__(self, master=None):
716 super().__init__(master)
717 self.pack()
Georg Brandl116aa622007-08-15 14:28:22 +0000718
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
Georg Brandl116aa622007-08-15 14:28:22 +0000737anchor
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
Serhiy Storchakaa4d170d2013-12-23 18:20:51 +0200748 You can pass integers 0 or 1 or the strings ``"yes"`` or ``"no"``.
Georg Brandl116aa622007-08-15 14:28:22 +0000749
750callback
751 This is any Python function that takes no arguments. For example::
752
753 def print_it():
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000754 print("hi there")
Georg Brandl116aa622007-08-15 14:28:22 +0000755 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
Miss Islington (bot)c5a987b2022-02-14 12:10:05 -0800759 representing RGB values in 4 bit: ``"#RGB"``, 8 bit: ``"#RRGGBB"``, 12 bit:
760 ``"#RRRGGGBBB"``, or 16 bit: ``"#RRRRGGGGBBBB"`` ranges, where R,G,B here
Georg Brandl116aa622007-08-15 14:28:22 +0000761 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
Georg Brandl502d9a52009-07-26 15:02:41 +0000800 This is almost always the :meth:`!set` method of some scrollbar widget, but can
Georg Brandl59b44722010-12-30 22:12:40 +0000801 be any widget method that takes a single argument.
Georg Brandl116aa622007-08-15 14:28:22 +0000802
Nikhil80428ed2019-09-10 01:55:34 -0700803wrap
Georg Brandl116aa622007-08-15 14:28:22 +0000804 Must be one of: ``"none"``, ``"char"``, or ``"word"``.
805
Nikhil80428ed2019-09-10 01:55:34 -0700806.. _Bindings-and-Events:
Georg Brandl116aa622007-08-15 14:28:22 +0000807
808Bindings and Events
809^^^^^^^^^^^^^^^^^^^
810
811.. index::
812 single: bind (widgets)
813 single: events (widgets)
814
Georg Brandl116aa622007-08-15 14:28:22 +0000815The 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
Berker Peksag3093bf12016-07-14 07:32:43 +0300840 def turn_red(self, event):
Georg Brandl116aa622007-08-15 14:28:22 +0000841 event.widget["activeforeground"] = "red"
842
Berker Peksag3093bf12016-07-14 07:32:43 +0300843 self.button.bind("<Enter>", self.turn_red)
Georg Brandl116aa622007-08-15 14:28:22 +0000844
845Notice how the widget field of the event is being accessed in the
Berker Peksag3093bf12016-07-14 07:32:43 +0300846``turn_red()`` callback. This field contains the widget that caught the X
Georg Brandl116aa622007-08-15 14:28:22 +0000847event. 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.
Georg Brandl116aa622007-08-15 14:28:22 +0000849
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000850+----+---------------------+----+---------------------+
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+----+---------------------+----+---------------------+
Georg Brandl116aa622007-08-15 14:28:22 +0000869
870
871The index Parameter
872^^^^^^^^^^^^^^^^^^^
873
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000874A number of widgets require "index" parameters to be passed. These are used to
Georg Brandl116aa622007-08-15 14:28:22 +0000875point 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
Georg Brandl116aa622007-08-15 14:28:22 +0000878Entry widget indexes (index, view index, etc.)
879 Entry widgets have options that refer to character positions in the text being
Georg Brandlac6060c2008-05-17 18:44:45 +0000880 displayed. You can use these :mod:`tkinter` functions to access these special
Georg Brandl116aa622007-08-15 14:28:22 +0000881 points in text widgets:
882
Georg Brandl116aa622007-08-15 14:28:22 +0000883Text 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
Ezio Melotti1a263ad2010-03-14 09:51:37 +0000894 * the string ``"active"``, which refers to the menu position that is currently
Georg Brandl116aa622007-08-15 14:28:22 +0000895 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
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300915Images of different formats can be created through the corresponding subclass
916of :class:`tkinter.Image`:
Georg Brandl116aa622007-08-15 14:28:22 +0000917
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300918* :class:`BitmapImage` for images in XBM format.
Georg Brandl116aa622007-08-15 14:28:22 +0000919
Andrés Delfino4b685bf2018-04-17 02:34:35 -0300920* :class:`PhotoImage` for images in PGM, PPM, GIF and PNG formats. The latter
921 is supported starting with Tk 8.6.
Georg Brandl116aa622007-08-15 14:28:22 +0000922
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.
Terry Jan Reedyd9865632015-05-17 14:49:26 -0400931
Andrés Delfinob81ca282018-04-21 09:17:26 -0300932.. seealso::
933
934 The `Pillow <http://python-pillow.org/>`_ package adds support for
935 formats such as BMP, JPEG, TIFF, and WebP, among others.
Terry Jan Reedyd9865632015-05-17 14:49:26 -0400936
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
Ankit Chandawalac36dbac2020-08-03 05:03:48 +0100984 Constants used in the *mask* arguments.