| :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). |