2009-10-11 18:25:26 -03:00
|
|
|
:tocdepth: 2
|
|
|
|
|
|
|
|
==========================
|
|
|
|
Graphic User Interface FAQ
|
|
|
|
==========================
|
|
|
|
|
2013-03-28 09:28:44 -03:00
|
|
|
.. only:: html
|
|
|
|
|
|
|
|
.. contents::
|
2009-10-11 18:25:26 -03:00
|
|
|
|
2009-12-19 13:59:59 -04:00
|
|
|
.. XXX need review for Python 3.
|
|
|
|
|
|
|
|
|
2009-10-11 18:25:26 -03:00
|
|
|
General GUI Questions
|
|
|
|
=====================
|
|
|
|
|
2021-08-17 06:00:58 -03:00
|
|
|
What GUI toolkits exist for Python?
|
|
|
|
===================================
|
2009-10-11 18:25:26 -03:00
|
|
|
|
|
|
|
Standard builds of Python include an object-oriented interface to the Tcl/Tk
|
2011-02-05 06:43:57 -04:00
|
|
|
widget set, called :ref:`tkinter <Tkinter>`. This is probably the easiest to
|
|
|
|
install (since it comes included with most
|
2016-02-26 14:37:12 -04:00
|
|
|
`binary distributions <https://www.python.org/downloads/>`_ of Python) and use.
|
2011-02-05 06:43:57 -04:00
|
|
|
For more info about Tk, including pointers to the source, see the
|
2016-05-07 04:49:07 -03:00
|
|
|
`Tcl/Tk home page <https://www.tcl.tk>`_. Tcl/Tk is fully portable to the
|
2021-09-22 14:33:36 -03:00
|
|
|
macOS, Windows, and Unix platforms.
|
2009-10-11 18:25:26 -03:00
|
|
|
|
2021-08-17 06:00:58 -03:00
|
|
|
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.
|
2009-10-11 18:25:26 -03:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
Merged revisions 75264,75268,75293,75318,75391-75392,75436,75478,75971,76003,76058,76140-76141,76231,76380,76428-76429 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75264 | andrew.kuchling | 2009-10-05 17:30:22 -0500 (Mon, 05 Oct 2009) | 1 line
Add various items
........
r75268 | andrew.kuchling | 2009-10-05 17:45:39 -0500 (Mon, 05 Oct 2009) | 1 line
Remove two notes
........
r75293 | kristjan.jonsson | 2009-10-09 09:32:19 -0500 (Fri, 09 Oct 2009) | 2 lines
http://bugs.python.org/issue7029
a non-default timer wasn't actually used by the individual Tests.
........
r75318 | benjamin.peterson | 2009-10-10 16:15:58 -0500 (Sat, 10 Oct 2009) | 1 line
remove script which uses long gone module
........
r75391 | andrew.kuchling | 2009-10-13 10:49:33 -0500 (Tue, 13 Oct 2009) | 1 line
Link to PEP
........
r75392 | andrew.kuchling | 2009-10-13 11:11:49 -0500 (Tue, 13 Oct 2009) | 1 line
Various link, textual, and markup fixes
........
r75436 | benjamin.peterson | 2009-10-15 10:39:15 -0500 (Thu, 15 Oct 2009) | 1 line
don't need to mess up sys.path
........
r75478 | senthil.kumaran | 2009-10-17 20:58:45 -0500 (Sat, 17 Oct 2009) | 3 lines
Fix a typo.
........
r75971 | benjamin.peterson | 2009-10-30 22:56:15 -0500 (Fri, 30 Oct 2009) | 1 line
add some checks for evaluation order with parenthesis #7210
........
r76003 | antoine.pitrou | 2009-10-31 19:30:13 -0500 (Sat, 31 Oct 2009) | 6 lines
Hopefully fix the buildbot problems on test_mailbox, by computing
the maildir toc cache refresh date before actually refreshing the cache.
(see #6896)
........
r76058 | benjamin.peterson | 2009-11-02 10:14:19 -0600 (Mon, 02 Nov 2009) | 1 line
grant list.index() a more informative error message #7252
........
r76140 | nick.coghlan | 2009-11-07 02:13:55 -0600 (Sat, 07 Nov 2009) | 1 line
Add test for runpy.run_module package execution and use something other than logging as the example of a non-executable package
........
r76141 | nick.coghlan | 2009-11-07 02:15:01 -0600 (Sat, 07 Nov 2009) | 1 line
Some minor cleanups to private runpy code and docstrings
........
r76231 | benjamin.peterson | 2009-11-12 17:42:23 -0600 (Thu, 12 Nov 2009) | 1 line
this main is much more useful
........
r76380 | antoine.pitrou | 2009-11-18 14:20:46 -0600 (Wed, 18 Nov 2009) | 3 lines
Mention Giampolo R's new FTP TLS support in the what's new file
........
r76428 | benjamin.peterson | 2009-11-19 20:15:50 -0600 (Thu, 19 Nov 2009) | 1 line
turn goto into do while loop
........
r76429 | benjamin.peterson | 2009-11-19 20:56:43 -0600 (Thu, 19 Nov 2009) | 2 lines
avoid doing an uneeded import in a function
........
2009-11-25 13:46:26 -04:00
|
|
|
One solution is to ship the application with the Tcl and Tk libraries, and point
|
2009-10-11 18:25:26 -03:00
|
|
|
to them at run-time using the :envvar:`TCL_LIBRARY` and :envvar:`TK_LIBRARY`
|
|
|
|
environment variables.
|
|
|
|
|
2023-05-27 14:34:19 -03:00
|
|
|
Various third-party freeze libraries such as py2exe and cx_Freeze have
|
|
|
|
handling for Tkinter applications built-in.
|
2009-10-11 18:25:26 -03:00
|
|
|
|
|
|
|
|
|
|
|
Can I have Tk events handled while waiting for I/O?
|
|
|
|
---------------------------------------------------
|
|
|
|
|
2015-05-17 15:49:26 -03:00
|
|
|
On platforms other than Windows, yes, and you don't even
|
|
|
|
need threads! But you'll have to restructure your I/O
|
2010-10-06 07:11:56 -03:00
|
|
|
code a bit. Tk has the equivalent of Xt's :c:func:`XtAddInput()` call, which allows you
|
2009-10-11 18:25:26 -03:00
|
|
|
to register a callback function which will be called from the Tk mainloop when
|
2015-05-17 15:49:26 -03:00
|
|
|
I/O is possible on a file descriptor. See :ref:`tkinter-file-handlers`.
|
2009-10-11 18:25:26 -03:00
|
|
|
|
|
|
|
|
|
|
|
I can't get key bindings to work in Tkinter: why?
|
|
|
|
-------------------------------------------------
|
|
|
|
|
|
|
|
An often-heard complaint is that event handlers bound 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).
|