--- title: Como criar um aplicativo com Python e GTK no ChromeOS date: 2025-07-19 modified: 2025-07-19 slug: como-criar-um-aplicativo-com-python-e-gtk-no-chromeos cover: https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/kfuSP6TgnbQ/upload/b6591e2955b50c4da162cfcb181bd51a.jpeg tags: python, chromeos, gnome, gtk-4 category: GTK lang: pt_BR status: published --- Hoje veremos como preparar o ambiente de desenvolvimento no Chromebook para a criação de aplicativos com a linguagem de programação [Python](https://www.python.org/) ([PyGObject](https://pypi.org/project/PyGObject/)) e o toolkit gráfico [GTK](https://www.gtk.org/) no Chromebook ([ChromeOS](https://chromeenterprise.google/intl/pt_br/os/)) 🤩. > **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. Abra o terminal e digite o seguinte comando: ```bash 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 no ChromeOS, o binding PyGObject e as bibliotecas gráficas GTK no ChromeOS estarão instalados. --- ## 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](https://www.vim.org/), todavia se você não possui experiência com esses editores instale o [nano](https://www.nano-editor.org/): ```bash sudo apt install nano ``` Após a instalação digite no terminal: ```bash sudo nano /etc/apt/sources.list ``` Agora, vamos adicionar o repositório **testing** (sid) no arquivo `sources.list`: ```bash # 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 MESMO `sudo 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 últimas versões e isso irá gerar diversos pacotes quebrados. No terminal execute: ```bash sudo nano /etc/apt/preferences ``` Dentro deste arquivo digite o seguinte código: ```bash 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: ```bash sudo apt update ``` Assim que a atualização dos repositórios for finalizada execute o seguinte comando para instalar os pacotes necessários: ```bash 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 ``` Após a instalação a linguagem de programação Python no ChromeOS, 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: * [Poetry](https://python-poetry.org/). * [Pipenv](https://pipenv.pypa.io/en/latest/). * [Pyenv](https://github.com/pyenv/pyenv). * [PDM](https://pdm.fming.dev/). * [venv](https://docs.python.org/3/library/venv.html). Nativo. * Etc. ### Criando o ambiente virtual Acesse a pasta raiz do seu projeto, abra um terminal, em seguida execute o comando: ```bash python3 -m venv venv ``` Para criar o ambiente virtual utilizando uma **versão específica** da linguagem de programação Python no ChromeOS pode ser utilizado comando: ```bash python3.X -m venv venv ``` > ⚠️ Substitua o `X` pela versão da linguagem de programação Python no ChromeOS 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 ativado**, caso contrário a instalação dos pacotes será realizada na instalação local da linguagem de programação Python no ChromeOS e não no ambiente virtual. Para ativar o ambiente virtual: ```bash 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: ```bash python -m pip install \ --upgrade pip ``` Em seguida vamos instalar o binding `PyGObject` e a biblioteca `PyGObject-stubs` com o comando: ```bash pip install \ pygobject \ PyGObject-stubs ``` Perfeito! Com isso podemos iniciar o desenvolvimento em um ambiente onde as dependências estão isoladas 😃. --- ## Testando A forma mais simples de testar a comunicação entre a linguagem de programação Python no ChromeOS e o toolkit gráfico GTK é executar no terminal o comando: ```bash 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 do ambiente Python e GTK no Chromebook 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: ```python # -*- 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, ['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) ```