Crie aplicativos GUI mais avançados usando a ferramenta PyGobject no Linux
Os aplicativos de interface gráfica do usuário (GUI) tornaram-se uma parte essencial do desenvolvimento de software moderno. As GUIs fornecem uma interface visualmente atraente e amigável para os usuários interagirem com o aplicativo. No Linux, PyGObject é uma ferramenta poderosa para desenvolver aplicativos GUI usando a biblioteca de introspecção GObject. PyGObject é um módulo Python que fornece ligações para bibliotecas baseadas em GObject, incluindo GTK, GStreamer e outras. Neste artigo, discutiremos como criar aplicativos GUI mais avançados usando PyGObject no Linux.
O que é PyGObject?
GObject é um sistema de objetos fundamental usado por GTK, GStreamer e outras bibliotecas para criar software orientado a objetos em C. PyGObject permite que os desenvolvedores criem aplicativos GUI usando Python enquanto aproveitam o poder das bibliotecas baseadas em GObject.
Requisitos
Antes de começarmos a desenvolver aplicativos GUI usando PyGObject, precisamos instalar algumas dependências. Neste tutorial, usaremos a biblioteca GTK para criar aplicativos GUI. Para instalar a biblioteca GTK, execute o seguinte comando em seu terminal -
sudo apt-get install libgtk-3-dev
Também precisamos instalar o módulo PyGObject, que fornece as ligações Python para a biblioteca GTK. Para instalar o PyGObject, execute o seguinte comando -
sudo apt-get install python3-gi
Depois de instalarmos as dependências necessárias, podemos começar a desenvolver nosso aplicativo GUI usando PyGObject.
Criando um aplicativo PyGObject simples
Vamos começar criando um aplicativo PyGObject simples que exibe uma janela. Abra seu editor de texto favorito e crie um novo arquivo chamado simple_app.py. Neste arquivo, adicione o seguinte código -
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="My Window")
win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
Vamos examinar esse código passo a passo. Primeiro importamos o módulo gi e especificamos que necessitamos da versão 3.0 da biblioteca GTK. Em seguida, importamos o módulo Gtk, que fornece as principais classes e funções para a criação de aplicações GUI usando PyGObject.
A seguir, criamos uma nova classe chamada MyWindow, que herda da classe Gtk.Window. No método __init__, chamamos o construtor pai e definimos o título da janela como “Minha Janela”.
Criamos então uma instância da classe MyWindow e conectamos o sinal “destroy” à função Gtk.main_quit, que será chamada quando o usuário fechar a janela. Por fim, mostramos a janela usando o método show_all e iniciamos o loop principal usando a função Gtk.main.
Para executar este aplicativo, abra seu terminal e navegue até o diretório que contém o arquivo simple_app.py. Em seguida, execute o seguinte comando -
python3 simple_app.py
Isto abrirá uma janela com o título “Minha Janela”.
Adicionando widgets à janela
Agora que criamos um aplicativo PyGObject simples, vamos adicionar alguns widgets à janela. Widgets são os blocos de construção de um aplicativo GUI e podem incluir botões, rótulos, caixas de texto e muito mais.
Vamos adicionar um rótulo à nossa janela. Modifique a classe MyWindow no arquivo simple_app.py para ficar assim -
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="My Window")
# Create a label widget
self.label = Gtk.Label()
# Add the label to the window
self.add(self.label)
No método __init__ , primeiro criamos uma instância da classe Gtk.Label e a atribuímos ao atributo self.label. Em seguida, adicionamos o widget de rótulo à janela usando o método add da classe Gtk.Window. Agora, quando criarmos uma instância da classe MyWindow e mostrarmos a janela, o widget de rótulo será exibido no canto superior esquerdo da janela. A seguir, vamos definir o texto do rótulo como “Hello, World!” e adicione-o à janela. Modifique o método __init__ para ficar assim -
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="My Window")
# Create a label
self.label = Gtk.Label()
self.label.set_text("Hello, World!")
self.add(self.label)
Adicionamos duas linhas de código para definir o texto do rótulo como "Hello, World!" e adicione-o à janela usando o método add.
Agora, ao executar o aplicativo, você deverá ver uma janela com o rótulo "Hello, World!".
Adicionando um botão
Vamos adicionar um botão à nossa janela que altera o texto do rótulo quando ele é clicado. Modifique o método __init__ da classe MyWindow para ficar assim -
class MyWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="My Window")
# Create a label
self.label = Gtk.Label()
self.label.set_text("Hello, World!")
self.add(self.label)
# Create a button
self.button = Gtk.Button(label="Click me")
self.button.connect("clicked", self.on_button_clicked)
self.add(self.button)
def on_button_clicked(self, widget):
self.label.set_text("Button clicked")
Adicionamos um novo widget Gtk.Button e o atribuímos à variável de instância self.button. Também conectamos o sinal “clicado” do botão a um novo método chamado on_button_clicked. Este método será chamado quando o botão for clicado.
No método on_button_clicked, definimos o texto do rótulo como “Botão clicado”.
Agora, ao executar o aplicativo, você deverá ver uma janela com um rótulo que diz “Hello, World!” e um botão que diz "Clique em mim". Ao clicar no botão, o texto do rótulo deverá mudar para “Botão clicado”.
A seguir, vamos explorar alguns aplicativos GUI mais avançados e complexos que podem ser criados usando PyGObject.
Criando um aplicativo de calculadora
Vamos criar um aplicativo de calculadora que execute operações aritméticas básicas.
Primeiro, definimos uma nova classe CalculatorWindow que herda da classe Gtk.Window. Esta classe é usada para criar a janela principal do aplicativo.
class CalculatorWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Calculator")
A seguir, criamos um layout de grade para organizar os widgets em uma estrutura semelhante a uma grade.
# Create a grid
grid = Gtk.Grid()
self.add(grid)
Criamos um widget Gtk.Label para exibir os resultados dos cálculos.
# Create the display label
self.display = Gtk.Label()
self.display.set_hexpand(True)
self.display.set_vexpand(True)
self.display.set_alignment(1, 0)
self.display.set_text("0")
grid.attach(self.display, 0, 0, 4, 1)
Em seguida, criamos os botões da calculadora. Cada botão é criado usando a classe Gtk.Button e rotulado com o número ou operador correspondente.
# Create the buttons
button_7 = Gtk.Button(label="7")
button_8 = Gtk.Button(label="8")
button_9 = Gtk.Button(label="9")
button_divide = Gtk.Button(label="/")
button_4 = Gtk.Button(label="4")
button_5 = Gtk.Button(label="5")
button_6 = Gtk.Button(label="6")
button_multiply = Gtk.Button(label="*")
button_1 = Gtk.Button(label="1")
button_2 = Gtk.Button(label="2")
button_3 = Gtk.Button(label="3")
button_subtract = Gtk.Button(label="-")
button_0 = Gtk.Button(label="0")
button_decimal = Gtk.Button(label=".")
button_equal = Gtk.Button(label="=")
button_add = Gtk.Button(label="+")
Conectamos o sinal clicado de cada botão ao método on_button_clicked, que é responsável por anexar o número ou operador correspondente à expressão atual que está sendo inserida.
# Connect the button signals to the handlers
button_7.connect("clicked", self.on_button_clicked, "7")
button_8.connect("clicked", self.on_button_clicked, "8")
button_9.connect("clicked", self.on_button_clicked, "9")
button_divide.connect("clicked", self.on_button_clicked, "/")
button_4.connect("clicked", self.on_button_clicked, "4")
button_5.connect("clicked", self.on_button_clicked, "5")
button_6.connect("clicked", self.on_button_clicked, "6")
button_multiply.connect("clicked", self.on_button_clicked, "*")
button_1.connect("clicked", self.on_button_clicked, "1")
button_2.connect("clicked", self.on_button_clicked, "2")
button_3.connect("clicked", self.on_button_clicked, "3")
button_subtract.connect("clicked", self.on_button_clicked, "-")
button_0.connect("clicked", self.on_button_clicked, "0")
button_decimal.connect("clicked", self.on_button_clicked, ".")
button_equal.connect("clicked", self.on_equal_clicked)
button_add.connect("clicked", self.on_button_clicked, "+")
Adicionamos os botões ao layout da grade, organizando-os em uma grade 4x4.
# Add the buttons to the grid
grid.attach(button_7, 0, 1, 1, 1)
grid.attach(button_8, 1, 1, 1, 1)
grid.attach(button_9, 2, 1, 1, 1)
grid.attach(button_divide, 3, 1, 1, 1)
grid.attach(button_4, 0, 2, 1, 1)
grid.attach(button_5, 1, 2, 1, 1)
grid.attach(button_6, 2, 2, 1, 1)
grid.attach(button_multiply, 3, 2, 1, 1)
grid.attach(button_1, 0, 3, 1, 1)
grid.attach(button_2, 1, 3, 1, 1)
grid.attach(button_3, 2, 3, 1, 1)
grid.attach(button_subtract, 3, 3, 1, 1)
grid.attach(button_0, 0, 4, 1, 1)
grid.attach(button_decimal, 1, 4, 1, 1)
grid.attach(button_equal, 2, 4, 1, 1)
grid.attach(button_add, 3, 4, 1, 1)
Definimos o método on_button_clicked que trata o evento click para cada botão. Este método anexa o caractere correspondente à expressão atual que está sendo inserida.
# Handler for the button click event
def on_button_clicked(self, widget, char):
self.expression += char
self.display.set_text(self.expression)
Também definimos o método on_equal_clicked que avalia a expressão atual e exibe o resultado no rótulo.
# Handler for the equal button click event
def on_equal_clicked(self, widget):
try:
result = str(eval(self.expression))
self.display.set_text(result)
self.expression = result
except:
self.display.set_text("Error")
self.expression = ""
Finalmente, criamos uma instância da classe CalculatorWindow e mostramos a janela principal.
if __name__ == "__main__":
win = CalculatorWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
Isso cria um aplicativo de calculadora básico com uma GUI. Você pode personalizá-lo ainda mais adicionando mais funcionalidades ou alterando o layout e design dos widgets.
Conclusão
PyGObject é uma ferramenta poderosa para criar aplicativos GUI no Linux. Ele fornece uma API Pythonic para a biblioteca GObject, que é a biblioteca C subjacente para GTK+. Com PyGObject, os desenvolvedores podem criar facilmente aplicativos GUI complexos e sofisticados para ambientes de desktop em Linux.
Neste artigo, cobrimos os fundamentos do PyGObject e demonstramos como criar um editor de texto simples e um aplicativo de calculadora usando a ferramenta. Também exploramos alguns recursos avançados do PyGObject, incluindo a criação de widgets personalizados e o uso de CSS para estilização.
PyGObject oferece uma ampla gama de possibilidades para a criação de aplicativos GUI em Linux. Os desenvolvedores podem aproveitar os recursos da ferramenta para criar aplicativos de desktop avançados e interativos que melhoram a experiência do usuário. Ao combinar a simplicidade e facilidade de uso do Python com o poder e a flexibilidade da biblioteca GObject, o PyGObject oferece uma solução robusta para a criação de aplicativos GUI avançados no Linux.