Photo by Andrew Neel on Unsplash
Como criar um aplicativo com Python e GTK no ChromeOS
Passo a passo para desenvolver um aplicativo com Python e GTK no ChromeOS de forma fácil
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 Chromebook (ChromeOS) 🤩.
OBS: Antes de mais nada, é necessário que o ambiente Linux esteja configurado no ChromeOS.
Dependendo da versão do Debian algumas configurações adicionais se fazem necessárias.
A seguir veremos com mais detalhes esses procedimentos.
Debian Bookworm
A distribuição Linux Debian Bookworm possui os pacotes do GTK 4 nos seus repositórios estáveis.
Abrar o terminal e digite o seguinte comando:
sudo apt -t sid install \
python3-full \
python3-dev \
python3-gi \
python3-gi-cairo \
libcairo2-dev \
libgirepository1.0-dev \
gir1.2-gtk-4.0 \
libgtk-4-dev \
libadwaita-1-dev
Assim que a instalação estiver concluída a linguagem de programação Python, o binding PyGObject e as bibliotecas do GTK estarão instaladas.
Debian Buster e Bullseye
Nessas versões do Debian os pacotes do GTK 4 não estão disponíveis nos repositórios estáveis e se faz necessária a configuração do repositório sid
.
Debian sid
Para adicionar o repositório sid é necessário editar o arquivo **sources.list**
.
Para editar o arquivo, abra o terminal e utilize um editor de texto como o vi
ou vim, todavia se você não possui experiencia com esses editores instale o nano:
sudo apt install nano
Com o fim da instalação digite no terminal:
sudo nano /etc/apt/sources.list
Agora vamos adicionar o repositório testing (sid) no arquivo sources.list
:
# Generated by distrobuilder
deb https://deb.debian.org/debian bullseye main
deb https://deb.debian.org/debian bullseye-updates main
deb https://deb.debian.org/debian-security/ bullseye-security main
deb http://http.us.debian.org/debian sid main non-free contrib
⚠️ NÃO EXECUTE
sudo apt update
OU MESMOsudo apt upgrade
!
Agora precisamos criar/editar o arquivo preferences
.
Se essa configuração não for feita, o sistema tentará atualizar todos os pacotes para as ultimas versões e isso irá gerar diversos pacotes quebrados.
No terminal execute:
sudo nano /etc/apt/preferences
Dentro deste arquivo digite o seguinte código:
Package: *
Pin: release a=stable
Pin-Priority: 700
Package: *
Pin: release a=testing
Pin-Priority: 650
Package: *
Pin: release a=unstable
Pin-Priority: 600
Salve o arquivo e agora podemos atualizar os repositórios:
sudo apt update
Assim que a atualização dos repositórios for finalizada execute o seguinte comando para instalar os pacotes necessários:
sudo apt -t sid install \
python3-full \
python3-dev \
python3-gi \
python3-gi-cairo \
libcairo2-dev \
libgirepository1.0-dev \
gir1.2-gtk-4.0 \
libgtk-4-dev \
libadwaita-1-dev
Com o fim da instalação a linguagem de programação Python, o tookit GTK 4 e o binding PyGObject
estarão instalados e prontos para uso 🚀.
Ambientes virtuais
Se você ainda não utiliza, este é um bom momento para testar algumas opções:
Criando o ambiente virtual
Acesse a pasta raiz do seu projeto, abra um terminal, em seguida execute o comando:
python3 -m venv venv
Para criar o ambiente virtual utilizando uma versão especifica da linguagem de programação Python pode ser utilizado comando:
python3.X -m venv venv
⚠️ Substitua o
X
pela versão da linguagem de programação Python que deseja utilizar.⚠️ A versão desejada deve estar instalada no sistema operacional!
Ativando o ambiente virtual
Após ser criado o ambiente virtual precisa ser ativo, caso contrário a instalação dos pacotes será realizada na instalação local da linguagem de programação Python e não no ambiente virtual.
Para ativar o ambiente virtual:
source venv/bin/activate
Instalando o binding
Com o ambiente virtual ativo, vamos começar atualizando o gerenciador de pacotes do Python (pip
) com o comando:
python -m pip install \
--upgrade pip
Em seguida vamos instalar o binding PyGObject
e a biblioteca PyGObject-stubs
com o comando:
pip install \
pygobject \
PyGObject-stubs
Perfeito com isso podemos iniciar o desenvolvimento em um ambiente onde as dependências estão isolada 😃.
Testando
A forma mais simples de testar a comunicação entre a linguagem de programação Python e o toolkit gráfico GTK, é executar no terminal o comando:
python3 -c "import gi"
⚠️ Lembre-se que o comando deve ser executado com o ambiente virtual ativo!
Se ao executar o comando nenhum erro for retornado, a instalação e configuração estão corretas 👍👋👋.
Código de exemplo
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 - PyGObjet - GTK:')
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)