Python3 + GTK+3 + Glade + Templates = <3
Vários softwares que você usa no ambiente Gnome podem ter sido desenvolvidos em Python. Aplicativos como Gnome Music e Gnome Tweaks são alguns exemplos disso.
Neste artigo eu vou mostrar um exemplo mínimo para que você tenha um ponto de partida para suas idéias. Vamos lá:
Crie um layout básico usando o editor Glade:
Coisas para prestar atenção:
- O componente raiz é um GtkApplicationWindow (aparece quando clica no botão Toplevels)
- Com ele selecionado, marque a checkbox Composite lá na direita (super importante!)
- Quando você marca a checkbox Composite o campo ID vira Class Name. Dê um nome e guarde ele, pois vamos usar já já.
- Dê um ID para o botão e guarde ele, pois vamos usar já já.
Com o Botão selecionado, troque para a aba Signals:
- Clique na coluna Handler da linha clicked
- Digite a primeira letra do nome do seu botão
- Aceite a sugestão (btnMain_clicked_cb, no meu examplo) e guarde ela, pois vamos usar já já.
Isso é tudo com o editor Glade. Salve seu .glade na pasta do seu projeto.
Crie um arquivo mínimo em Python:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import GLib, Gio, Gtk
import sys
#
# 1. nosso arquivo .glade (pode ter o path que quiser)
#
@Gtk.Template.from_file("a.glade")
class AppWindow(Gtk.ApplicationWindow):
#
# 2. a 'Class Name' de GtkApplicationWindow
#
__gtype_name__ = "app_window"
#
# 3. o 'ID' do Botão
#
btnMain: Gtk.Button = Gtk.Template.Child()
#
# 4. o nome do 'Handler' de 'Signals'
#
@Gtk.Template.Callback()
def btnMain_clicked_cb(self, widget, **_kwargs):
assert self.btnMain == widget
print(widget.get_label())
class Application(Gtk.Application):
def __init__(self, *args, **kwargs):
super().__init__(*args, application_id="dev.monique.Gtk1",
flags=Gio.ApplicationFlags.FLAGS_NONE, **kwargs)
self.window = None
def do_activate(self):
self.window = self.window or AppWindow(application=self)
self.window.present()
if __name__ == '__main__':
Application().run(sys.argv)
Você também vai precisar:
pip install PyGObject
Pode ser que reclame de bibliotecas faltantes, basta ler a saída de erro e instalar as dependências (eu tive que apt install libcairo2-dev libgirepository1.0-dev
)
Com este código você terá tudo que precisa para começar.
Boa Sorte!