FAQ da Interface Gráfica do Usuário

Perguntas Gerais sobre a GUI

Quais toolkits de GUI existem para o 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.

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