2. Começando

2.1. Exemplo simples

Para começar com o nosso tutorial, criamos o programa mais simples possível. Este programa irá criar uma janela vazia de 200×200 pixels.

_images/simple_example.png
1import gi
2
3gi.require_version("Gtk", "3.0")
4from gi.repository import Gtk
5
6win = Gtk.Window()
7win.connect("destroy", Gtk.main_quit)
8win.show_all()
9Gtk.main()

Vamos agora explicar cada linha do exemplo.

import gi

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

No começo, temos que importar o módulo Gtk para poder acessar as classes e funções do GTK+. Como o sistema de um usuário pode ter várias versões do GTK+ instaladas ao mesmo tempo, queremos ter certeza de que, quando importamos o Gtk, ele se refere ao GTK+ 3 e não a qualquer outra versão da biblioteca, que é o propósito da declaração gi.require_version('Gtk', '3.0').

A próxima linha cria uma janela vazia.

win = Gtk.Window()

Seguido conectando-se ao evento de exclusão da janela para garantir que o aplicativo seja encerrado se clicarmos no x para fechar a janela.

win.connect("destroy", Gtk.main_quit)

Na próxima etapa, exibimos a janela.

win.show_all()

Finalmente, iniciamos o loop de processamento do GTK+, que encerramos quando a janela é fechada (veja a linha 6).

Gtk.main()

Para executar o programa, abra um terminal, mude para o diretório do arquivo e digite:

python simple_example.py

2.2. Exemplo estendido

Para algo um pouco mais útil, aqui está a versão PyGObject do programa clássico “Hello World”.

_images/extended_example.png
 1import gi
 2
 3gi.require_version("Gtk", "3.0")
 4from gi.repository import Gtk
 5
 6
 7class MyWindow(Gtk.Window):
 8    def __init__(self):
 9        super().__init__(title="Hello World")
10
11        self.button = Gtk.Button(label="Click Here")
12        self.button.connect("clicked", self.on_button_clicked)
13        self.add(self.button)
14
15    def on_button_clicked(self, widget):
16        print("Hello World")
17
18
19win = MyWindow()
20win.connect("destroy", Gtk.main_quit)
21win.show_all()
22Gtk.main()

Este exemplo difere do exemplo simples, pois subclassificamos Gtk.Window para definir nossa própria classe MyWindow.

class MyWindow(Gtk.Window):

No construtor da classe, temos que chamar o construtor da superclasse. Além disso, dizemos para definir o valor da propriedade title como Hello World.

        super().__init__(title="Hello World")

As próximas três linhas são usadas para criar um widget de botão, conectar ao seu sinal clicked e adicioná-lo como filho à janela de nível superior.

        self.button = Gtk.Button(label="Click Here")
        self.button.connect("clicked", self.on_button_clicked)
        self.add(self.button)

Assim, o método on_button_clicked() será chamado se você clicar no botão.

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

O último bloco, fora da classe, é muito semelhante ao exemplo acima, mas ao invés de criar uma instância da classe genérica Gtk.Window, criamos uma instância de MyWindow.