Distribuição Linux Ubuntu no menu iniciar do Microsoft Windows.

Como criar um aplicativo com Python e GTK no Windows WSL 2

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 WSL 2 (Windows Subsystem for Linux) do Microsoft Windows.

Através do WSLg (Windows Subsystem for Linux GUI) é possível iniciar e interagir com aplicativos gráficos do Linux usando um ambiente de desktop nativo do Windows.

O WSLg utiliza o protocolo de servidor de exibição Wayland e utiliza um compositor de sistema do Windows para renderizar os aplicativos GUI do Linux. Ele também aproveita a aceleração da GPU para melhorar o desempenho gráfico

🚨 Para utilizar o WSLg é necessário possuir o Microsoft Windows 10 Build 19044 ou superior.

Instalação

A instalação do WSL 2 é bem simples.

Abra o PowerShell ou CMD como administrador e execute o comando:

wsl --install

Assim que o comando terminar de instalar todos os componentes do WSL 2 e a distribuição Linux Ubuntu, reinicie o computador.


Dependências

Localize a distribuição Linux Ubuntu no menu iniciar do Microsoft Windows:

Distribuição Linux Ubuntu no menu iniciar do Microsoft Windows.
Distribuição Linux Ubuntu no menu iniciar do Microsoft Windows.

📝 Na primeira execução será solicitada a criação de um usuário e senha.

Assim que o Ubuntu estiver inicializado digite no terminal:

sudo apt update && sudo apt dist-upgrade
Atualizando os pacotes da distribuição Linux Ubuntu.
Atualizando os pacotes da distribuição Linux Ubuntu.

Com o fim das atualizações podemos instalar a linguagem de programação Python e as bibliotecas do GTK com o comando:

sudo apt install \
build-essential \
meson \
ninja-build \
python3-full \
python3-dev \
python3-pip \
python3-dev \
python3-gi \
python3-gi-cairo \
libcairo2-dev \
libgirepository1.0-dev \
gir1.2-gtk-4.0 \
libgtk-4-dev \
libadwaita-1-dev \
gtk-4-examples

Ao finalizar as instalação dos pacotes, a linguagem de programação Python, o binding PyGObject e as bibliotecas do GTK estarão instalados e prontos para uso 🚀.


Visual Studio Code

O Visual Studio Code possui o plugin WSL:

Instalando o plugin WSL no Visual Studio Code.
Instalando o plugin WSL no Visual Studio Code.

Esse plugin permite a interação do editor de texto Visual Studio Code com o WSL 2.

Após a instalação do plugin é necessário definir qual será a distribuição Linux utilizada.

Para isso, clique no botão que fica no canto inferior esquerdo do editor de texto:

Configurando o Visual Studio Code no WSL 2.
Configurando o Visual Studio Code no WSL 2.

No menu que aparece selecione Connect to WSL:

Conectando o Visual Studio Code no WSL 2.
Conectando o Visual Studio Code no WSL 2.

Após selecionar aguarde o processo de inicialização:

Aguardando a conexão do Visual Studio Code no WSL 2.
Aguardando a conexão do Visual Studio Code no WSL 2.

Código

Para testar a configuração, crie um arquivo e digite o seguinte código no mesmo:

# -*- 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)

Ao executar o código no Visual Studio Code temos o seguinte resultado:

Aplicativo Python e GTK sendo executado no WSL 2.
Aplicativo Python e GTK sendo executado no WSL 2.

Extra

Explorador de arquivos

É possível utilizar o Explorador de arquivos do Microsoft Windows para gerenciar as pastas e arquivos que estão dentro do WSL 2:

Acessando os arquivos do Linux no Explorer do Microsoft Windows.
Acessando os arquivos do Linux no Explorer do Microsoft Windows.

O recurso se ativa automaticamente após a instalação do WSL 2.