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