Desenvolvendo com Python e o toolkit GTK no MS Windows

Photo by Windows on Unsplash

Desenvolvendo com Python e o toolkit GTK no MS Windows

Play this article

Hoje veremos como preparar o ambiente de desenvolvimento para a criação de aplicativos com a linguagem de programação Python (PyGObject) e o toolkit gráfico GTK no Microsoft Windows.

O desenvolvimento de aplicativos GTK no Microsoft Windows é uma questão que vejo frequentemente na internet.

É possível desenvolver?

Sim é possível, contudo hoje a melhor forma de se iniciar um novo projeto GTK é utilizando o IDE Gnome Builder juntamento com o sistema de empacotamento/distribuição flatpak 💜.

Evidentemente que a utilização do Gnome Builder não é obrigatória.

Por isso hoje veremos como preparar o ambiente de desenvolvimento sem ele .


MSYS2

O MSYS2 permite que pacotes, ferramentas e bibliotecas do Linux sejam instalados e executados de forma nativa no Microsoft Windows.

Para a instalação e gestão dos pacotes, o MSYS2 utiliza o gerenciador de pacotes Pacman.

Instalação

A instalação do MSYS2 é bem simples.

Antes de mais nada, acesse o site oficial https://www.msys2.org/ e realize o download do instalador:

Site oficial do MSYS2.

Assim que o download for concluído de 2 cliques sobre o instalador que foi baixado:

Instalador do MSYS2 na pasta downloads do Microsoft Windows.

O instalador é bem simples e não é necessário alterar as configurações padrão que são exibidas nas telas.

Clique em Next e vá avançando até finalizar a instalação:

Tela inicial do instalador do MSYS2.

Com o fim da instalação procure pelo terminal do MSYS2 no meu iniciar do Microsoft Windows:

Terminal do MSYS2 no menu iniciar do Microsoft Windows.

Com o terminal aberto realize a atualização dos pacotes que vem instalados:

pacman -Syu

Atualizando os pacotes do MSYS2.

Assim que as atualizações estiverem finalizadas pode ser necessário fechar e abrir o novamente.


GTK

O comando exibido nessa sessão irá instalar as bibliotecas do GTK, a linguagem de programação Python e o binding PyGObject.

Dependências

🚨 Os comandos abaixo devem ser executados no terminal do MSYS2!

pacman -S \
mingw-w64-x86_64-python3 \
mingw-w64-x86_64-python3-pip \
mingw-w64-x86_64-python3-gobject \
mingw-w64-x86_64-python-autopep8 \
mingw-w64-x86_64-python-pylint \
mingw-w64-x86_64-python-isort \
mingw-w64-x86_64-python-poetry \
mingw-w64-x86_64-blueprint-compiler \
mingw-w64-x86_64-gtk4 \
mingw-w64-x86_64-libadwaita

Instalando a linguagem Python e o toolkit GTK.

Assim que a instalação dos pacotes terminar devemos testar a comunicação da linguagem de programação Python com o toolkit GTK.

Abra o terminal MinGW x64 e digite:

python3 -c "import gi"

🚨 Não é o terminal do MSYS2 é o terminal MinGW x64.

Testando a comunicação entre a linguagem Python e o toolkit GTK.

Para testar via PowerShell ou outros terminais:

C:\msys64\mingw64\bin\python3 -c "import gi"

Testando a comunicanção entre a linguagem Python e o toolkit GTK no PowerShell.

Se ao executar o comando nenhum erro for retornado, a instalação e configuração estão corretas 👍👋👋.


Configurando o interpretador Python

Visual Studio Code (VSCode)

Abra o Visual Studio Code, crie um novo arquivo e salve o mesmo com o nome main.py ou qualquer outro nome que preferir.

No canto inferior direito do Visual Studio Code clique na opção Select python interpreter, pode ser que haja um interpretador Python selecionado, basta clicar sobre o mesmo para alterar:

Configurando o interpretador Python no Visual Studio Code.

Ao clicar nessa opção será aberto um menu onde você pode selecionar os interpretadores e ambientes virtuais disponíveis.

Selecionando o interpretador Python no Visual Studio Code.

🚨 Se o interpretador Python que está instalado via MSYS2 não aparecer adicione manualmente o caminho C:\msys64\mingw64\bin\python3. Esse caminho também pode ser adicionado ao Path do Microsoft Windows (recomendado).

PyCharm

Já no PyCharm vá até o menu File e clique na opção Settings, dentro de Settings procure por Python Interpreter e adicione o caminho até o interpretador Python ou ambiente virtual:

Configurando o interpretador Python no PyCharm.

🚨 Se o interpretador Python que está instalado via MSYS2 não aparecer adicione manualmente o caminho C:\msys64\mingw64\bin\python3.


Código

Para testar a configuração no seu editor de texto ou IDE utilize o seguinte código de exemplo:

# -*- coding: utf-8 -*-
"""Python e GTK: PyGObject Gtk.ApplicationWindow()."""

import gi

gi.require_version(namespace='Gtk', version='4.0')
gi.require_version(namespace='Adw', version='1')

from gi.repository import Adw, Gio, Gtk

Adw.init()


class ExampleWindow(Gtk.ApplicationWindow):

    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.set_title(title='Python e GTK: PyGObject Gtk.ApplicationWindow()')
        self.set_default_size(width=int(1366 / 2), height=int(768 / 2))
        self.set_size_request(width=int(1366 / 2), height=int(768 / 2))

        headerbar = Gtk.HeaderBar.new()
        self.set_titlebar(titlebar=headerbar)

        menu_button_model = Gio.Menu()
        menu_button_model.append('Preferências', 'app.preferences')

        menu_button = Gtk.MenuButton.new()
        menu_button.set_icon_name(icon_name='open-menu-symbolic')
        menu_button.set_menu_model(menu_model=menu_button_model)
        headerbar.pack_end(child=menu_button)

        # O seu código aqui:
        # ...


class ExampleApplication(Adw.Application):

    def __init__(self):
        super().__init__(application_id='br.com.justcode.Example',
                         flags=Gio.ApplicationFlags.FLAGS_NONE)

        self.create_action('quit', self.exit_app, ['<primary>q'])
        self.create_action('preferences', self.on_preferences_action)

    def do_activate(self):
        win = self.props.active_window
        if not win:
            win = ExampleWindow(application=self)
        win.present()

    def do_startup(self):
        Gtk.Application.do_startup(self)

    def do_shutdown(self):
        Gtk.Application.do_shutdown(self)

    def on_preferences_action(self, action, param):
        print('Ação app.preferences foi ativa.')

    def exit_app(self, action, param):
        self.quit()

    def create_action(self, name, callback, shortcuts=None):
        action = Gio.SimpleAction.new(name, None)
        action.connect('activate', callback)
        self.add_action(action)
        if shortcuts:
            self.set_accels_for_action(f'app.{name}', shortcuts)


if __name__ == '__main__':
    import sys

    app = ExampleApplication()
    app.run(sys.argv)

Como resultado do código de exemplo temos:

Aplicativo GTK sendo executando no Microsoft Windows.

Perfeito, o toolkit gráfico GTK está funcionando juntamente com a linguagem de programação Python no Microsoft Windows 🎉🎉.


Extra

Caso não tenha nenhuma versão do interpretador Python no sistema operacional, a pasta bin do MSYS2 pode ser configurada na variável Path do sistema operacional.

Para isso é preciso abrir o aplicativo Propriedades do sistema, acessar a aba Avançado e clicar no botão Variáveis de Ambiente…:

Acessando as variáveis de ambiente no Microsoft Windows.

Assim que a janela Variáveis de Ambiente for aberta podemos configurar a variável Path do usuário que está atualmente conectado ou para todos os usuários do sistema.

📝 Não existe certo ou errado.

Para adicionar uma nova entrada selecione a opção Path e clique em Editar….

Editando a variável Path do Microsoft Windows.

Na janela que se abre digite o caminho C:\msys64\mingw64\bin:

Configurando a variável Path do Microsoft Windows.

Dessa forma o interpretador Python, as ferramentas e binários instalados através do MSYS2 serão reconhecidos pelos terminais do sistema operacional 😄.

Outra dica que pode ser interessante é criar os seus projetos dentro da pasta:

C:\msys64\home\nome-do-seu-usuário

Os terminais do MSYS2 sempre irão abrir no seu diretório home e criar os projetos nessa pasta pode facilitar a navegação.


Did you find this article valuable?

Support Renato Cruz by becoming a sponsor. Any amount is appreciated!