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


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


What GUI toolkits exist for Python?
===================================

Standard builds of Python include an object-oriented interface to the
Tcl/Tk widget set, called tkinter.  This is probably the easiest to
install (since it comes included with most binary distributions of
Python) and use. For more info about Tk, including pointers to the
source, see the Tcl/Tk home page.  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 and platform-specific
GUI frameworks can be found on the python wiki.


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