PyGObject: Um Guia para Criar Aplicações GUI em Python no Linux

Criar aplicações de interface gráfica (GUI) é uma forma fantástica de trazer suas ideias à vida e tornar seus programas mais amigáveis para o usuário.

PyGObject é uma biblioteca de Python que permite que desenvolvedores criem aplicações de GUI no ambiente de desktop Linux usando a framework GTK (GIMP Toolkit). O GTK é amplamente usado em ambientes Linux, fornecendo poder a muitas populares aplicações desktop como o Gedit, o terminal GNOME, e muito mais.

Neste artigo, nós exploraremos como criar aplicações de GUI em um ambiente de desktop Linux usando o PyGObject. Vamos começar entendendo o que é o PyGObject, como instalá-lo, e então prosseguir para construir uma simples aplicação de GUI.

Passo 1: Instalar Python e GTK no Linux

Para trabalhar com o PyGObject, você precisa ter o Python instalado e a maioria das distribuições Linux de hoje vem com Python pré-instalado, mas você pode confirmar executando:

python3 --version

Python 3.12.3

Se o Python não estiver instalado, você pode instalá-lo usando o comando apropriado a seguir para sua distribuição Linux específica.

sudo apt install python3       [On Debian, Ubuntu and Mint]
sudo dnf install python3       [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add python3           [On Alpine Linux]
sudo pacman -S python          [On Arch Linux]
sudo zypper install python3    [On OpenSUSE]    

Agora, você precisa instalar as bindings PyGObject para Python, bem como as bibliotecas de desenvolvimento GTK.

sudo apt install python3-gi gir1.2-gtk-3.0    [On Debian, Ubuntu and Mint]
sudo dnf install python3-gobject gtk3         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject gtk+3                [On Alpine Linux]
sudo pacman -S python-gobject gtk3            [On Arch Linux]
sudo zypper install python3-gobject gtk3      [On OpenSUSE] 

Step 2: Instalando PyGObject no Linux

Uma vez que o Python e as bibliotecas de desenvolvimento GTK estejam instalados, você pode agora instalar o PyGObject usando o seguinte comando apropriado para sua distribuição Linux específica.

sudo apt install python3-gi           [On Debian, Ubuntu and Mint]
sudo dnf install pygobject3           [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject              [On Alpine Linux]
sudo pacman -S python-gobject         [On Arch Linux]
sudo zypper install python3-gobject   [On OpenSUSE]    

Após a instalação, você estará pronto para começar a desenvolver aplicativos de interface gráfica usando PyGObject e GTK.

Criando a Primeira Aplicação de Interface Gráfica com PyGObject no Linux

Agora, vamos construir um aplicativo PyGObject simples que exibe uma janela com um botão. Quando o botão é clicado, ele exibirá a mensagem “}Hello, World!“.

Crie um arquivo Python chamado app.py, e vamos começar a escrever a estrutura básica do nosso aplicativo PyGObject.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World App")
        self.set_size_request(300, 100)

        # Creating a button and adding it to the window
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        self.add(button)

    def on_button_clicked(self, widget):
        print("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)  # Close the app when window is closed
app.show_all()
Gtk.main()

Explicação do Código:

  • As primeiras duas linhas importam os módulos PyGObject necessários. Nós especificamos a versão do GTK que queremos usar (3.0 neste caso).
  • A classe MyApp herda de Gtk.Window, que representa a janela principal do aplicativo.
  • Nós criamos um botão usando Gtk.Button, e o rótulo do botão é definido como “}Clique em Mim“. Também conectamos o sinal do botão “clicked” ao método on_button_clicked, que imprime “}Hello, World!” quando clicado.
  • O loop principal do aplicativo é iniciado chamando Gtk.main(). Esse loop espera por eventos (como cliques) e atualiza o aplicativo conforme necessário.

Para executar a aplicação, navegue até o diretório onde você salvou o arquivo app.py e execute o seguinte comando:

python3 app.py

Uma janela aparecerá com um botão rotulado “Clique Aqui“. Quando você clicar no botão, “Olá, Mundo!” será impresso no terminal.

PyGObject GUI Application

Adicionando mais recursos à sua aplicação PyGObject

Agora vamos expandir nossa aplicação adicionando mais widgets e interatividade.

1. Adicionando uma Rótulo

Podemos aprimorar nossa aplicação adicionando um Gtk.Label para exibir mensagens na janela em vez de imprimir no terminal.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Enhanced GUI App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create a label
        self.label = Gtk.Label(label="Press the button to see a message")
        vbox.pack_start(self.label, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

    def on_button_clicked(self, widget):
        self.label.set_text("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Explicação das Mudanças:

  • Usamos Gtk.Box para organizar os widgets verticalmente, o que nos ajuda a arrumar o rótulo e o botão um após o outro.
  • O widget Gtk.Label é adicionado para exibir uma mensagem dentro da janela.
  • Em vez de imprimir no terminal, a função on_button_clicked agora atualiza o texto do rótulo.
PyGObject GUI Application with Label

2. Adicionando Campos de Entrada para Entrada do Usuário

Próximo, vamos adicionar widgets Gtk.Entry para permitir entrada do usuário, o que nos permitirá criar uma aplicação simples onde os usuários podem inserir seus nomes e clicar em um botão para exibir uma saudação personalizada.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="User Input App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Explicação do Código:

  • O Gtk.Entry é um campo de entrada onde os usuários podem digitar seu nome.
  • O método set_placeholder_text mostra uma dica dentro da caixa de entrada até que o usuário digite algo.
  • Após clicar no botão, o nome inserido é recuperado usando get_text() e exibido na etiqueta como um cumprimento personalizado.
PyGObject GUI Application with User Input

3. Estilizando sua Aplicação com CSS

O PyGObject permite que você aplique estilos personalizados aos widgets da sua aplicação usando um arquivo CSS chamado style.css.

window {
    background-color: #f0f0f0;
}

button {
    background-color: #4CAF50;
    color: white;
    border-radius: 5px;
    padding: 10px;
}

label {
    font-size: 16px;
    color: #333;
}

Agora, modifique o código Python para carregar e aplicar este arquivo CSS:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Styled GUI App")
        self.set_size_request(400, 200)

        # Load CSS
        css_provider = Gtk.CssProvider()
        css_provider.load_from_path("style.css")
        screen = Gdk.Screen.get_default()
        style_context = Gtk.StyleContext()
        style_context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

Explicação das mudanças no CSS:

  • O botão agora tem um fundo verde e as etiquetas tem uma fonte personalizada de tamanho e cor.
  • As bordas do botão são arredondadas para um aspecto moderno.
PyGObject GUI Application with CSS Styling
Conclusão

PyGObject é uma ferramenta poderosa para criar aplicações de interface gráfica (GUI) no ambiente de trabalho Linux usando o Python. Ao aproveitar a flexibilidade e simplicidade do Python, juntamente com as funcionalidades rica de GTK, os desenvolvedores podem criar aplicações com recursos abrangentes e de visual agradável.

Neste guia, nós abordamos os fundamentos de como configurar o PyGObject, criar uma janela simples, lidar com cliques de botão, adicionar entrada do usuário e até aplicar estilos CSS personalizados.

Você pode estender estes exemplos para construir aplicações mais complexas, como gerenciadores de arquivos, reprodutores de mídia, ou até software profissional. Com PyGObject e GTK, as possibilidades de criar aplicações desktop são quase ilimitadas!

Source:
https://www.tecmint.com/pygobject-create-python-gui-application-linux/