Preguntas frecuentes sobre la Interfaz Gráfica de Usuario (*GUI*)
*****************************************************************


Preguntas generales de la GUI
=============================


¿Qué conjuntos de herramientas de GUI independientes por plataforma existen para Python?
========================================================================================

Dependiendo de la plataforma(s) que esté apuntando, hay varias.
Algunas de ellas aún no han sido llevadas a Python 3. Al menos Tkinter
y Qt son conocidas por ser compatibles con Python 3.


Tkinter
-------

Los empaquetados estándar de Python incluyen una interfaz orientada a
objetos para el conjunto de widgets de Tcl/Tk, llamada tkinter. Esta
es probablemente la más fácil de instalar (ya que viene incluida con
la mayoría de distribuciones binarias de Python) y usar. Para obtener
más información sobre Tk, incluyendo referencias a la fuente, ver la
Tcl/Tk página de inicio. Tcl/Tk es totalmente potable a Mac OSX,
Windows y plataformas Unix.


wxWidgets
---------

wxWidgets (https://www.wxwidgets.org) es una biblioteca de clase GUI
portátil y gratuita escrita en C ++ que proporciona una apariencia
nativa en varias plataformas, con Windows, Mac OS X, GTK, X11, todas
listadas como objetivos estables actuales. Los enlaces a lenguajes
están disponibles para varios lenguajes, incluidos Python, Perl, Ruby,
etc.

wxPython es el enlace de Python para wxwidgets. Si bien a menudo va un
poco por detrás de las versiones oficiales de wxWidgets, también
ofrece una serie de características a través de extensiones puras de
Python que no están disponibles en otros enlaces de lenguajes. Existe
una comunidad activa de usuarios y desarrolladores de wxPython.

Tanto wxWidgets como wxPython son software gratuito, de código
abierto, con licencias permisivas que permiten su uso en productos
comerciales, así como en *freeware* o *shareware*.


Qt
--

Hay enlaces disponibles para el conjunto de herramientas Qt (usando
PyQt o PySide) y para KDE(PyKDE4). PyQt es actualmente más maduro que
PySide, pero debe comprar una licencia PyQt de Riverbank Computing si
desea escribir aplicaciones propietarias. PySide es gratuito para
todas las aplicaciones.

Qt 4.5 en adelante tiene licencia bajo la licencia LGPL; además, las
licencias comerciales están disponibles desde The Qt Company.


Gtk+
----

Los GObject introspection bindings para Python le permiten escribir
aplicaciones GTK + 3 .También hay un Tutorial Python GTK+ 3.

Los enlaces más antiguos de PyGtk para el conjunto de herramientas
Gtk+ 2 han sido implementado por James Henstridge; ver
<http://www.pygtk.org>.


Kivy
----

Kivy es una biblioteca GUI multiplataforma que admite sistemas
operativos de escritorio (Windows, macOS, Linux) y dispositivos
móviles (Android, iOS). Está escrito en Python y Cython, y puede usar
una gama de *backends* de ventanas.

Kivy es un software gratuito y de código abierto distribuido bajo la
licencia MIT.


FLTK
----

Los enlaces de Python para el conjunto de herramientas de FLTK, un
sistema de ventanas multiplataforma simple pero potente y maduro,
están disponibles en el proyecto PyFLTK.


OpenGL
------

Para abrir enlaces de OpenGL, ver PyOpenGL.


¿Qué conjuntos de herramientas de GUI específicas por plataforma existen para Python?
=====================================================================================

Al instalar PyObjc Objective-C bridge, los programas de Python pueden
usar librerías de Mac OS X’s Cocoa.

Pythonwin por Mark Hammond incluye una interfaz para las Clases de
Microsoft Foundation y un entorno de programación Python que está
escrito principalmente en Python usando las clases MFC.


Preguntas de Tkinter
====================


¿Cómo congelo las aplicaciones de Tkinter?
------------------------------------------

Freeze es una herramienta para crear aplicaciones independientes. Al
congelar aplicaciones Tkinter, las aplicaciones no serán realmente
independientes, ya que la aplicación seguirá necesitando las
bibliotecas Tcl y Tk.

Una solución es enviar la aplicación con las bibliotecas Tcl y Tk, y
apuntarlas en tiempo de ejecución utilizando "TCL_LIBRARY" y las
variables de entorno "TK_LIBRARY".

Para obtener aplicaciones verdaderamente independientes, los *scripts*
Tcl que forman la biblioteca también deben integrarse en la
aplicación. Una herramienta compatible es SAM (módulos
independientes), que forma parte de la distribución Tix
(http://tix.sourceforge.net/).

Construya Tix con SAM habilitado, realice la llamada apropiada a
"Tclsam_init()", etc. dentro de Python "Modules/tkappinit.c", y enlace
con libtclsam libtclsam y libtksam (también puede incluir las
bibliotecas Tix).


¿Puedo tener eventos Tk manejados mientras espero por *I/O*?
------------------------------------------------------------

En plataformas que no sean Windows, sí, ¡y ni siquiera necesita hilos!
Pero tendrá que reestructurar un poco su código de I/O. Tk tiene el
equivalente de la llamada Xt "XtAddInput()", que le permite registrar
una función de *callback* que se llamará desde el bucle principal de
Tk cuando sea posible I/O en un descriptor de archivo. Ver Gestor de
archivos.


No puedo hacer que los atajos de teclado funcionen en Tkinter: ¿por qué?
------------------------------------------------------------------------

Una queja que se escucha con frecuencia es que los controladores de
eventos vinculados a eventos con el método "bind()" no se manejan
incluso cuando se presiona la tecla adecuada.

La causa más común es que el widget al que se aplica el atajo no tiene
enfoque de teclado. Consulte la documentación de Tk para el comando de
*focus*. Por lo general, un *widget* recibe el foco del teclado
haciendo clic en él (pero no para las etiquetas; consulte la opción
*takefocus*).
