This document is for an old version of Python that is no longer supported. You should upgrade and read the documentação do Python para versão estável atual.

# FAQ da Interface Gráfica do Usuário

Sumário

- FAQ da Interface Gráfica do Usuário

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

    - Tkinter

    - wxWidgets

    - Qt

    - Gtk+

    - FLTK

    - OpenGL

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

  - Perguntas do Tkinter

    - Como eu pauso as aplicações Tkinter?

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

    - Não consigo obter ligações chave para trabalhar em Tkinter: por quê?

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

Depending on what platform(s) you are aiming at, there are several.

### Tkinter

Standard builds of Python include an object-oriented interface to the Tcl/Tk widget set, called Tkinter. This is probably the easiest to install and use. For more info about Tk, including pointers to the source, see the Tcl/Tk home page at https://www.tcl.tk. Tcl/Tk is fully portable to the Mac OS X, Windows, and Unix platforms.

### 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 (http://www.wxpython.org) is the Python binding for wxwidgets. While it often lags slightly behind the official wxWidgets releases, it also offers a number of features via pure Python extensions that are not available in other language bindings. There is an active wxPython user and developer community.

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+

PyGtk bindings for the Gtk+ toolkit have been implemented by James Henstridge; see <http://www.pygtk.org>.

### 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?

By installing the PyObjc Objective-C bridge, Python programs can use Mac OS X’s Cocoa libraries.

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 pauso 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 File Handlers.

### Não consigo obter ligações chave para trabalhar em Tkinter: por quê?

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