Instale os pacotes necessários
Para criar um aplicativo usando Python 3 e GTK3, você precisa instalar ligações Python para bibliotecas GObject. Isso pode ser feito instalando o pacote PyGObject incluído nos repositórios de quase todas as principais distribuições Linux. Para instalar essas dependências no Ubuntu, você pode usar o comando abaixo:
$ sudo apt install python3 python3-giVocê também pode compilar o PyGObject a partir do código-fonte disponível aqui.
Código completo do aplicativo Hello World
Exemplo de código completo de um aplicativo Hello World escrito em Python 3 e GTK3 pode ser encontrado abaixo. Este aplicativo envia um “Hello World !!”Notificação na área de trabalho com o clique de um botão.
importar gikimono.require_version ("Gtk", "3.0 ")
kimono.require_version ('Notificar', '0.7 ')
de kimono.repositório importar Gtk
de kimono.Importação de repositório Notificar
classe MyWindow (Gtk.Janela):
def __init __ (self):
Gtk.Janela.__init __ (self, title = "Hello World")
Gtk.Janela.set_default_size (self, 640, 480)
Notificar.init ("Aplicativo GTK3 Simples")
auto.box = Gtk.Caixa (espaçamento = 6)
auto.add (self.caixa)
auto.botão = Gtk.Botão (rótulo = "Clique aqui")
auto.botão.set_halign (Gtk.Alinhar.CENTRO)
auto.botão.set_valign (Gtk.Alinhar.CENTRO)
auto.botão.conectar ("clicado", self.on_button_clicked)
auto.caixa.pack_start (self.botão, verdadeiro, verdadeiro, 0)
def on_button_clicked (self, widget):
n = Notificar.Notificação.novo ("Simple GTK3 Application", "Hello World !!")
n.mostrar()
win = MyWindow ()
vencer.conectar ("destruir", Gtk.main_quit)
vencer.mostre tudo()
Gtk.a Principal()
Captura de tela do resultado final.
A notificação na área de trabalho que chega quando o botão “Clique aqui” é clicado:
Explicação passo a passo
Várias instruções de "importação" nas primeiras linhas do código importam os módulos necessários para que o aplicativo funcione. Esses módulos expõem várias classes e funções que podem ser usadas dentro do aplicativo. “Gi.as declarações de require_version ”garantem que apenas a versão necessária da biblioteca seja importada para evitar problemas de compatibilidade e travamentos. Neste caso “3.0 ”é usado para garantir que a biblioteca GTK3 seja usada no aplicativo e não GTK2 ou qualquer outra versão do GTK.
Semelhante à classe GTK, a classe Notify também é importada especificando sua versão necessária (0.7 é a versão mais recente no momento em que este artigo foi escrito). Esta classe será usada posteriormente no aplicativo.
importar gikimono.require_version ("Gtk", "3.0 ")
kimono.require_version ('Notificar', '0.7 ')
de kimono.repositório importar Gtk
de kimono.Importação de repositório Notificar
A próxima declaração subclasses “Gtk.Classe Window ”como classe“ MyWindow ”. O “Gtk.Janela.método __init__ ”inicializa o construtor da superclasse (Gtk.Window) a partir da qual uma subclasse (MyWindow) foi criada. No construtor, o título do aplicativo também é definido como “Hello World” usando o argumento “title”. A geometria padrão da janela do aplicativo também é definida especificando-se a largura e a altura no método “set_default_size”.
classe MyWindow (Gtk.Janela):def __init __ (self):
Gtk.Janela.__init __ (self, title = "Hello World")
Gtk.Janela.set_default_size (self, 640, 480)
Em seguida, o método “init” da classe Notify é usado para inicializar a biblioteca “libnotify”, fornecendo um título de aplicativo. Sem a inicialização, as notificações não serão enviadas e exibidas na área de trabalho do Linux.
Notificar.init ("Aplicativo GTK3 Simples")A declaração “box” adiciona um contêiner de layout vazio à janela principal do aplicativo. Este contêiner é como uma tela vazia onde qualquer número de widgets pode ser colocado. “Espaçamento” refere-se ao espaço entre widgets nas unidades de “pixel”.
auto.box = Gtk.Caixa (espaçamento = 6)auto.add (self.caixa)
Um novo widget de botão “Clique aqui” é criado usando o “Gtk.Método de botão. Ele é então alinhado aos centros horizontais e verticais do layout da caixa pai usando os métodos “set_halign” e “set_valign”. O botão é conectado ao sinal “clicado” para que sempre que o botão for pressionado, o método de retorno de chamada “on_button_clicked” possa ser invocado. Por último, o widget de botão é inserido da esquerda ao longo do eixo horizontal para o layout da caixa usando a opção “caixa.método pack_start ”. Este método leva quatro argumentos: o objeto widget a ser adicionado, booleano para expandir o widget, booleano para preencher o widget e preenchimento entre o widget adicionado e outros adjacentes.
auto.botão = Gtk.Botão (rótulo = "Clique aqui")auto.botão.set_halign (Gtk.Alinhar.CENTRO)
auto.botão.set_valign (Gtk.Alinhar.CENTRO)
auto.botão.conectar ("clicado", self.on_button_clicked)
auto.caixa.pack_start (self.botão, verdadeiro, verdadeiro, 0)
O método “on_button_click” é invocado sempre que o botão “Clique aqui” é pressionado. Uma nova notificação é criada usando o “novo” método que leva o título e o conteúdo da notificação como argumentos. Esta notificação é então mostrada na área de trabalho usando o método “show”. Você também pode mover a instrução “novo” no construtor principal para evitar recriar a notificação sempre que o botão for pressionado.
def on_button_clicked (self, widget):n = Notificar.Notificação.novo ("Simple GTK3 Application", "Hello World !!")
n.mostrar()
As próximas declarações são sobre como criar, gerenciar e mostrar uma nova janela de aplicativo. Uma nova instância da classe “MyWindow” é criada e é conectada ao sinal “destruir” para garantir que o aplicativo seja fechado corretamente sempre que um usuário decidir encerrar o aplicativo clicando no botão “x”. O método “show_all” exibe a janela do aplicativo em sua área de trabalho Linux. Por fim, o principal loop do aplicativo responsável por manipular eventos e sinais é executado.
Conclusão
GTK3 e Qt são alguns dos frameworks GUI mais populares usados para criar aplicativos que rodam nativamente no Linux. Ambas as estruturas permitem que você escreva a lógica principal nas linguagens C ++ e Python. Você não pode errar ao escolher qualquer um desses kits de ferramentas para o seu próximo projeto de aplicativo Linux.