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


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


Quais toolkits de GUI existem para o Python?
============================================

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 macOS, Windows e Unix.

Dependendo da(s) plataforma(s) que você está visando, também existem
várias alternativas. Uma lista de frameworks GUI de plataformas
cruzadas e frameworks GUI específicas de plataforma podem ser
encontradas na wiki do python.


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 a aplicação 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 (https://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).
