Webkit é uma engine open source para web browser utilizada em diversos projetos onde uma lista dos mesmos pode ser vista aqui. Entre os projetos que utilizam o webkit estão grandes aplicativos como o google chrome e o safari da apple mostrando o quão poderosa é essa engine e o motivo de eu utiliza-la para criar um web browser.
A interface do browser foi criada com o glade, com a seguinte estrutura de widgets:
Gtk.Window -- Janela principal
|
Gtk.Vbox -- Divide a janela principal em 2 verticalmente
|
\_ _ _ Gtk.Hbox -- Divide a primeira parte da janela principal em 4 horizontalmente
| |
| \_ _ _Gtk.Toolbar -- Espaço onde ficará os botões voltar, avançar e atualizar a pagina
| |
| \_ _ _Gtk.Entry -- Barra para digitar a URL
| |
| Gtk.Toolbar -- Adicionei apenas para separar as barras de texto pura estética
| |
| Gtk.Entry -- Barra para pesquisa no google
|
Gtk.ScrolledWindow -- Barras de rolagem da página webBem simples de ser moldada no glade
Segue o código comentado:
#!/usr/bin/env python # -*- coding: utf-8 -*- from gi.repository import Gtk, WebKit class Browser(object): def __init__(self): # Obtendo os widgets do arquivo gerado pelo glade builder = Gtk.Builder() builder.add_from_file("browser.glade") self.window = builder.get_object("window") self.window.show() self.go_back_button = builder.get_object("go_back") self.go_forward_button = builder.get_object("go_forward") self.refresh_button = builder.get_object("refresh") self.scrolledwindow = builder.get_object("scrolledwindow") self.url = builder.get_object("entry") self.search_entry = builder.get_object("search_entry") # Instanciando a classe do webkit que irá exibir a página self.view = WebKit.WebView() self.scrolledwindow.add(self.view) # página inicial a ser carregada ao iniciar o navegador self.view.open("http://sourcecode.net.br") self.view.show() # Conectando os sinais do webkit self.view.connect("load-committed", self.check_buttons) self.view.connect("title-changed", self.change_title) # Conectando os sinais do Gtk builder.connect_signals({ "gtk_main_quit": Gtk.main_quit, "on_entry_activate": self.go_, "on_search_activate": self.search, "go_back_clicked": self.go_back, "go_forward_clicked": self.go_forward, "refresh_clicked": self.refresh, }) def go_(self, widget): """Carrega a página da barra de endereço""" link = self.url.get_text() if link.startswith("http://"): self.view.open(link) else: self.view.open("http://" + link) self.view.show() def search(self, widget): """ Pesquisa no google o conteúdo contido na barra de pesquisa""" text = self.search_entry.get_text() text = text.replace(" ", "+") self.url.set_text("http://www.google.com.br/search?q=" + text) self.search_entry.set_text("") self.go_(self) def check_buttons(self, widget, data): """Verifica se os botões voltar, avançar estão disponíveis, em caso verdadeiro os botões podem ser utilizados caso contrário os botões são desativados. Também atualiza a barra de endereços com a página atualmente carregada.""" uri = widget.get_main_frame().get_uri() self.url.set_text(uri) self.go_back_button.set_sensitive(self.view.can_go_back()) self.go_forward_button.set_sensitive(self.view.can_go_forward()) def change_title(self, widget, data, arg): """ Altera o título do navegador para título da página atualmente carregada """ title = widget.get_main_frame().get_title() self.window.set_title("Makai Browser - %s" % title) def go_back(self, widget): """Volta a página""" self.view.go_back() def go_forward(self, widget): """Avança a página""" self.view.go_forward() def refresh(self, widget): """Atualiza a página""" self.view.reload() if __name__ == "__main__": browser = Browser() Gtk.main()
Navegador pronto para uso, agora é só surfar pela web
Caso queira utilizar esse código ou implementa-lo fique a vontade. E uma dica, se desejar implementar suporte a abas pesquise sobre Gtk.Notebook
O arquivo .glade e o .py podem ser baixados aqui
Referência:
http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html
Amigo , eu também uso o fedora... , não sei mt bem mecher com o glade , meu primeiro dia.... , eu tentei abrir o arquivo .glade com o proprio glade , só que aparece um quadrado para modelar , mais não o quadrado do browser.
[Responder comentário]Olá Henrique, se você abrir o arquivo .glade com o próprio glade ele irá abriar a janela do browser para ser modelado mesmo, se você quer rodar o browser para testa-lo rode o arquivo .py. Se ao tentar abrir o arquivo com o glade e os widgets do browser não aparecer para serem editados alguma coisa está errada, verifique a versão do glade, esse arquivo foi criado na versão 3.x.
[Responder comentário]