| :tocdepth: 2 | 
 |  | 
 | ========================== | 
 | Graphic User Interface FAQ | 
 | ========================== | 
 |  | 
 | .. only:: html | 
 |  | 
 |    .. contents:: | 
 |  | 
 | .. XXX need review for Python 3. | 
 |  | 
 |  | 
 | General GUI Questions | 
 | ===================== | 
 |  | 
 | What GUI toolkits exist for Python? | 
 | =================================== | 
 |  | 
 | Standard builds of Python include an object-oriented interface to the Tcl/Tk | 
 | widget set, called :ref:`tkinter <Tkinter>`.  This is probably the easiest to | 
 | install (since it comes included with most | 
 | `binary distributions <https://www.python.org/downloads/>`_ of Python) and use. | 
 | For more info about Tk, including pointers to the source, see the | 
 | `Tcl/Tk home page <https://www.tcl.tk>`_.  Tcl/Tk is fully portable to the | 
 | macOS, Windows, and Unix platforms. | 
 |  | 
 | Depending on what platform(s) you are aiming at, there are also several | 
 | alternatives. A `list of cross-platform | 
 | <https://wiki.python.org/moin/GuiProgramming#Cross-Platform_Frameworks>`_ and | 
 | `platform-specific | 
 | <https://wiki.python.org/moin/GuiProgramming#Platform-specific_Frameworks>`_ GUI | 
 | frameworks can be found on the python wiki. | 
 |  | 
 | Tkinter questions | 
 | ================= | 
 |  | 
 | How do I freeze Tkinter applications? | 
 | ------------------------------------- | 
 |  | 
 | Freeze is a tool to create stand-alone applications.  When freezing Tkinter | 
 | applications, the applications will not be truly stand-alone, as the application | 
 | will still need the Tcl and Tk libraries. | 
 |  | 
 | One solution is to ship the application with the Tcl and Tk libraries, and point | 
 | to them at run-time using the :envvar:`!TCL_LIBRARY` and :envvar:`!TK_LIBRARY` | 
 | environment variables. | 
 |  | 
 | Various third-party freeze libraries such as py2exe and cx_Freeze have | 
 | handling for Tkinter applications built-in. | 
 |  | 
 |  | 
 | Can I have Tk events handled while waiting for I/O? | 
 | --------------------------------------------------- | 
 |  | 
 | On platforms other than Windows, yes, and you don't even | 
 | need threads!  But you'll have to restructure your I/O | 
 | code a bit.  Tk has the equivalent of Xt's :c:func:`!XtAddInput` call, which allows you | 
 | to register a callback function which will be called from the Tk mainloop when | 
 | I/O is possible on a file descriptor.  See :ref:`tkinter-file-handlers`. | 
 |  | 
 |  | 
 | I can't get key bindings to work in Tkinter: why? | 
 | ------------------------------------------------- | 
 |  | 
 | An often-heard complaint is that event handlers :ref:`bound <bindings-and-events>` | 
 | to events with the :meth:`!bind` method | 
 | don't get handled even when the appropriate key is pressed. | 
 |  | 
 | The most common cause is that the widget to which the binding applies doesn't | 
 | have "keyboard focus".  Check out the Tk documentation for the focus command. | 
 | Usually a widget is given the keyboard focus by clicking in it (but not for | 
 | labels; see the takefocus option). |