Hoy me encontré con otro un hilo en la lista de PyAr que me deja un link más que interesante: ¡Existe un binding para usar Webkit sobre GTK desde Python, y lo mejor de todo es que ya está incluido en los repositorios de Ubuntu 9.10!
Webkit es un motor de renderizado («dibujado») de páginas web, que es utilizado en el corazón en cada vez más navegadores, como Chrome, Safari, Konqueror, etc. Es super completo y veloz; y permite ejecutarse en muchísimas plataformas y sistemas diferentes. Si bien existen otros métodos para embeber un navegador en una aplicación PyGTK, como por ejemplo gtkmozembed (que embebe el motor de Firefox), éste no es muy poderoso, o por lo menos no deja meterle mucha «mano» para personalizarlo, y uno termina teniendo relativamente muy poco «poder». En cambio con Webkit/GTK se pueden hacer muchas más cosas, tan sólo hace falta ver la documentación y un ejemplo (links al final, claro). 🙂
No podía dejar de probarlo. Entonces me puse manos a la obra, y salió esto, tratando de imitar lo que se posteó en la lista:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
SimpleBrowser - Navegador muy muy simple de internet, sólo de ejemplo,
que utiliza la biblioteca Webkit GTK desde Python (PyWebkitGTK).
Marcelo Fidel Fernández - http://www.marcelofernandez.info
Licencia: BSD. Disponible en: http://www.freebsd.org/copyright/license.html
"""
import sys
import gtk
import webkit
DEFAULT_URL = 'http://www.python.org'
class SimpleBrowser:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
self.window.connect('delete_event', self.close_application)
self.window.set_default_size(800, 600)
vbox = gtk.VBox(spacing=5)
vbox.set_border_width(5)
self.txt_url = gtk.Entry()
self.txt_url.connect('activate', self._txt_url_activate)
self.scrolled_window = gtk.ScrolledWindow()
self.webview = webkit.WebView()
self.scrolled_window.add(self.webview)
vbox.pack_start(self.txt_url, fill=False, expand=False)
vbox.pack_start(self.scrolled_window, fill=True, expand=True)
self.window.add(vbox)
def _txt_url_activate(self, entry):
self._load(entry.get_text())
def _load(self, url):
self.webview.open(url)
def open(self, url):
self.txt_url.set_text(url)
self.window.set_title('SimpleBrowser - %s' % url)
self._load(url)
def show(self):
self.window.show_all()
def close_application(self, widget, event, data=None):
gtk.main_quit()
if __name__ == '__main__':
if len(sys.argv) > 1:
url = sys.argv[1]
else:
url = DEFAULT_URL
# PyWebkitGTK necesita habilitar el soporte de los hilos en PyGTK
gtk.gdk.threads_init()
browser = SimpleBrowser()
browser.open(url)
browser.show()
gtk.main()
¡Y Listo!
Todo lo que se necesita en Ubuntu 9.10 para poder correr esto es instalar el paquete «python-webkit»; sin embargo, esta versión es la 1.1.5, mientras que PyWebkitGTK va por la 1.1.7 y Webkit/GTK va por la 1.1.15, así que todavía hay lugar para mejoras.
Aquí dejo algunos links:
- PyWebkitGTK se llama el proyecto de llevar Webkit/GTK (escrito naturalmente en C) a Python.
- Acá hay un ejemplo muchísimo más completo de un navegador con múltiples pestañas y todo.
- Lamentablemente, la documentación de la biblioteca en Python no existe aún (es un ticket del proyecto), así que por ahora habrá que conformarse con la documentación de Webkit/GTK; sin embargo, yo lo encuentro bastante legible, ya que enseguida uno se adapta a «traducir» cómo se llamaría un método en C a uno en Python.
Espero que les sirva. Me divertí mucho haciéndolo. 🙂
Saludos
Deja una respuesta