Home | History | Annotate | Download | only in faq
      1 :tocdepth: 2
      2 
      3 ==========================
      4 Graphic User Interface FAQ
      5 ==========================
      6 
      7 .. only:: html
      8 
      9    .. contents::
     10 
     11 .. XXX need review for Python 3.
     12 
     13 
     14 General GUI Questions
     15 =====================
     16 
     17 What platform-independent GUI toolkits exist for Python?
     18 ========================================================
     19 
     20 Depending on what platform(s) you are aiming at, there are several.  Some
     21 of them haven't been ported to Python 3 yet.  At least `Tkinter`_ and `Qt`_
     22 are known to be Python 3-compatible.
     23 
     24 .. XXX check links
     25 
     26 Tkinter
     27 -------
     28 
     29 Standard builds of Python include an object-oriented interface to the Tcl/Tk
     30 widget set, called :ref:`tkinter <Tkinter>`.  This is probably the easiest to
     31 install (since it comes included with most
     32 `binary distributions <https://www.python.org/downloads/>`_ of Python) and use.
     33 For more info about Tk, including pointers to the source, see the
     34 `Tcl/Tk home page <https://www.tcl.tk>`_.  Tcl/Tk is fully portable to the
     35 Mac OS X, Windows, and Unix platforms.
     36 
     37 wxWidgets
     38 ---------
     39 
     40 wxWidgets (https://www.wxwidgets.org) is a free, portable GUI class
     41 library written in C++ that provides a native look and feel on a
     42 number of platforms, with Windows, Mac OS X, GTK, X11, all listed as
     43 current stable targets.  Language bindings are available for a number
     44 of languages including Python, Perl, Ruby, etc.
     45 
     46 `wxPython <https://www.wxpython.org>`_ is the Python binding for
     47 wxwidgets.  While it often lags slightly behind the official wxWidgets
     48 releases, it also offers a number of features via pure Python
     49 extensions that are not available in other language bindings.  There
     50 is an active wxPython user and developer community.
     51 
     52 Both wxWidgets and wxPython are free, open source, software with
     53 permissive licences that allow their use in commercial products as
     54 well as in freeware or shareware.
     55 
     56 
     57 Qt
     58 ---
     59 
     60 There are bindings available for the Qt toolkit (using either `PyQt
     61 <https://riverbankcomputing.com/software/pyqt/intro>`_ or `PySide
     62 <https://wiki.qt.io/PySide>`_) and for KDE (`PyKDE4 <https://techbase.kde.org/Languages/Python/Using_PyKDE_4>`__).
     63 PyQt is currently more mature than PySide, but you must buy a PyQt license from
     64 `Riverbank Computing <https://www.riverbankcomputing.com/commercial/license-faq>`_
     65 if you want to write proprietary applications.  PySide is free for all applications.
     66 
     67 Qt 4.5 upwards is licensed under the LGPL license; also, commercial licenses
     68 are available from `The Qt Company <https://www.qt.io/licensing/>`_.
     69 
     70 Gtk+
     71 ----
     72 
     73 The `GObject introspection bindings <https://wiki.gnome.org/Projects/PyGObject>`_
     74 for Python allow you to write GTK+ 3 applications.  There is also a
     75 `Python GTK+ 3 Tutorial <https://python-gtk-3-tutorial.readthedocs.io>`_.
     76 
     77 The older PyGtk bindings for the `Gtk+ 2 toolkit <https://www.gtk.org>`_ have
     78 been implemented by James Henstridge; see <http://www.pygtk.org>.
     79 
     80 Kivy
     81 ----
     82 
     83 `Kivy <https://kivy.org/>`_ is a cross-platform GUI library supporting both
     84 desktop operating systems (Windows, macOS, Linux) and mobile devices (Android,
     85 iOS).  It is written in Python and Cython, and can use a range of windowing
     86 backends.
     87 
     88 Kivy is free and open source software distributed under the MIT license.
     89 
     90 FLTK
     91 ----
     92 
     93 Python bindings for `the FLTK toolkit <http://www.fltk.org>`_, a simple yet
     94 powerful and mature cross-platform windowing system, are available from `the
     95 PyFLTK project <http://pyfltk.sourceforge.net>`_.
     96 
     97 OpenGL
     98 ------
     99 
    100 For OpenGL bindings, see `PyOpenGL <http://pyopengl.sourceforge.net>`_.
    101 
    102 
    103 What platform-specific GUI toolkits exist for Python?
    104 ========================================================
    105 
    106 By installing the `PyObjc Objective-C bridge
    107 <https://pythonhosted.org/pyobjc/>`_, Python programs can use Mac OS X's
    108 Cocoa libraries.
    109 
    110 :ref:`Pythonwin <windows-faq>` by Mark Hammond includes an interface to the
    111 Microsoft Foundation Classes and a Python programming environment
    112 that's written mostly in Python using the MFC classes.
    113 
    114 
    115 Tkinter questions
    116 =================
    117 
    118 How do I freeze Tkinter applications?
    119 -------------------------------------
    120 
    121 Freeze is a tool to create stand-alone applications.  When freezing Tkinter
    122 applications, the applications will not be truly stand-alone, as the application
    123 will still need the Tcl and Tk libraries.
    124 
    125 One solution is to ship the application with the Tcl and Tk libraries, and point
    126 to them at run-time using the :envvar:`TCL_LIBRARY` and :envvar:`TK_LIBRARY`
    127 environment variables.
    128 
    129 To get truly stand-alone applications, the Tcl scripts that form the library
    130 have to be integrated into the application as well. One tool supporting that is
    131 SAM (stand-alone modules), which is part of the Tix distribution
    132 (http://tix.sourceforge.net/).
    133 
    134 Build Tix with SAM enabled, perform the appropriate call to
    135 :c:func:`Tclsam_init`, etc. inside Python's
    136 :file:`Modules/tkappinit.c`, and link with libtclsam and libtksam (you
    137 might include the Tix libraries as well).
    138 
    139 
    140 Can I have Tk events handled while waiting for I/O?
    141 ---------------------------------------------------
    142 
    143 On platforms other than Windows, yes, and you don't even
    144 need threads!  But you'll have to restructure your I/O
    145 code a bit.  Tk has the equivalent of Xt's :c:func:`XtAddInput()` call, which allows you
    146 to register a callback function which will be called from the Tk mainloop when
    147 I/O is possible on a file descriptor.  See :ref:`tkinter-file-handlers`.
    148 
    149 
    150 I can't get key bindings to work in Tkinter: why?
    151 -------------------------------------------------
    152 
    153 An often-heard complaint is that event handlers bound to events with the
    154 :meth:`bind` method don't get handled even when the appropriate key is pressed.
    155 
    156 The most common cause is that the widget to which the binding applies doesn't
    157 have "keyboard focus".  Check out the Tk documentation for the focus command.
    158 Usually a widget is given the keyboard focus by clicking in it (but not for
    159 labels; see the takefocus option).
    160