FAQ da Interface Gráfica do Usuário
***********************************


Perguntas Gerais sobre a GUI
============================


Que ferramentas de GUI independentes da plataforma existem para o Python?
=========================================================================

Dependendo da(s) plataforma(s) que você está mirando, existem vários.
Alguns deles ainda não foram portados para o Python 3. É sabido que
pelo menos Tkinter e Qt são compatíveis com Python 3.


Tkinter
-------

As versões padrão do Python incluem uma interface orientada a objetos
para o conjunto de widgets Tcl/Tk, chamado tkinter. Este é
provavelmente o mais fácil de instalar (uma vez que vem incluído na
maioria das distribuições binárias do Python) e usar. Para obter mais
informações sobre o Tk, incluindo ponteiros para a fonte, consulte a
página inicial do Tcl/Tk. Tcl/Tk é totalmente portátil para as
plataformas Mac OS X, Windows e Unix.


wxWidgets
---------

WxWidgets (https://www.wxwidgets.org) é uma biblioteca de classe GUI
livre e portátil escrita em C ++ que fornece uma aparência e sensação
nativas em várias plataformas, com Windows, Mac OS X, GTK, X11, todos
listados como Metas estáveis atuais. As ligações de idiomas estão
disponíveis para vários idiomas, incluindo Python, Perl, Ruby, etc.

wxPython é a ligação do Python para wxwidgets. Embora muitas vezes
fique um pouco atrás dos lançamentos oficiais do wxWidgets, também
oferece vários recursos por meio de extensões Python puras que não
estão disponíveis em outras associações de linguagem. Há uma
comunidade ativa de usuários e desenvolvedores do wxPython.

Ambos wxWidgets e wxPython são gratuitos, de código aberto, software
com licenças permissivas que permitem seu uso em produtos comerciais,
bem como em freeware ou shareware.


Qt
--

Existem ligações disponíveis para o kit de ferramentas Qt (usando PyQt
<https://riverbankcomputing.com/software/pyqt/intro> *_ ou* PySide
<https://wiki.qt.io/PySide> *_) e Para o KDE (`PyKDE4
<https://techbase.kde.org/Languages/Python/Using_PyKDE_4>* __). O PyQt
é atualmente mais maduro do que o PySide, mas você deve comprar uma
licença PyQt da *Riverbank Computing
<https://www.riverbankcomputing.com/commercial/license-faq>* _ se você
deseja escrever aplicativos proprietários. PySide é gratuito para
todas as aplicações.

Qt 4.5 para cima é licenciado sob a licença LGPL; Além disso, as
licenças comerciais estão disponíveis na *The Qt Company
<https://www.qt.io/licensing/>* _.


Gtk+
----

As ligações de introspecção de GObject para o Python permitem escrever
aplicativos GTK+ 3. Há também um tutorial Python GTK+ 3.

As ligações PyGtk mais antigas para o kit de ferramentas GTK+ 2 foram
implementadas por James Henstridge; veja <http://www.pygtk.org>.


Kivy
----

*Kivy <https://kivy.org/>* _ é uma biblioteca GUI multi-plataforma que
suporta sistemas operacionais de desktop (Windows, MacOS, Linux) e
dispositivos móveis (Android, iOS). Está escrito em Python e Cython, e
pode usar uma gama de backends de janelas.

O Kivy é um software livre e de código aberto distribuído sob a
licença MIT.


FLTK
----

As ligações Python para o kit de ferramentas FLTK, um sistema de
janelas multiplataforma simples, porém poderoso e maduro, estão
disponíveis no projeto PyFLTK.


OpenGL
------

Para ligações OpenGL, veja *PyOpenGL
<http://pyopengl.sourceforge.net>* _.


Que kits de ferramentas GUI específicos da plataforma existem para o Python?
============================================================================

Instalando a ponte PyObjc Objective-C, os programas Python podem usar
as bibliotecas Cocoa do Mac OS X.

Pythonwin de Mark Hammond inclui uma interface para o Microsoft
Foundation Classes e um ambiente de programação Python que está
escrito principalmente em Python usando as classes MFC.


Perguntas do Tkinter
====================


Como eu congelo as aplicações Tkinter?
--------------------------------------

Freeze é uma ferramenta para criar aplicativos autônomos. Ao congelar
aplicativos Tkinter, os aplicativos não serão verdadeiramente
autônomos, pois o aplicativo ainda precisará das bibliotecas Tcl e Tk.

Uma solução é enviar o aplicativo com as bibliotecas Tcl e Tk e
apontá-las em tempo de execução usando as variáveis de ambiente
"TCL_LIBRARY" e "TK_LIBRARY".

Para obter aplicativos verdadeiramente autônomos, os scripts Tcl que
formam a biblioteca também precisam ser integrados no aplicativo. Uma
ferramenta que suporta isso é SAM (módulos autônomos), que faz parte
da distribuição Tix (http://tix.sourceforge.net/).

Compile o Tix com SAM habilitado, execute a chamada apropriada para
"Tclsam_init()" etc. dentro do "Modules/tkappinit.c" do Python e faça
um link com libtclsam e libtksam (você também pode incluir as
bibliotecas Tix).


Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?
-----------------------------------------------------------

Em plataformas diferentes do Windows, sim, e você nem precisa de
threads! Mas você terá que reestruturar seu código de E/S um pouco. O
Tk tem o equivalente à chamada "XtAddInput()" do Xt, que permite que
você registre uma função de retorno de chamada que será chamada a
partir do loop principal do Tk quando E/S é possível em um descritor
de arquivo. Consulte Tratadores de arquivos.


Não consigo fazer as ligações de tecla funcionarem no Tkinter: por que?
-----------------------------------------------------------------------

Uma queixa frequentemente ouvida é que os manipuladores de eventos
vinculados a eventos com o método "bind()" não são manipulados mesmo
quando a tecla apropriada é pressionada.

A causa mais comum é que o widget para o qual a ligação se aplica não
possui "foco no teclado". Confira a documentação do Tk para o comando
de foco. Normalmente, um widget é dado o foco do teclado clicando nele
(mas não para rótulos, veja a opção takefocus).
