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]