Tutorial de PyQt, crear un navegador web. Parte 6

Posted on sáb 09 julio 2011 in Tutorial de Python y PyQt • 2 min read

Continuando con los tutoriales de PyQt, ahora toca explicar como crear un navegador web.

La idea es tener una ventana de entrada de datos donde se escribe el url a navegar, a su lado se tiene un botón que ejecuta la navegación al url dado, luego abajo se tiene el widget de navegación y por último abajo se tiene un botón de salir. Se puede navegar también dando enter en el campo del url.

El widget nuevo que se está usando es:

  • QWebView: Permite crear una vista de navegación web.

El código del programa se muestra a continuación:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#Se importa el modulo sys
import sys

#De PyQt4 importar QtGui,QtCore y QtWebkit.
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4 import QtWebKit




class App(QtGui.QWidget):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self, parent)
        #Se define el tamano de la ventana
        # posicion en x,y, ancho y alto
        self.setGeometry(0, 50, 1024, 550)
        #Se le coloca un titulo a la ventana y se asocia un icono.
        self.setWindowTitle('Navegador')
        self.setWindowIcon(QtGui.QIcon('./openlogo-50.png'))

        #Se crea una entrada de datos donde se pasa el url a navegar
        self.entradaUrl = QtGui.QLineEdit("http://www.debian.org.ve")
        #Se crea el boton para ir a una pagina web
        navegar = QtGui.QPushButton("Ir",self)
        #Se crea el boton salir
        quit = QtGui.QPushButton("Salir",self)
        #Se crea el widget donde se mostrara la pagina web
        self.web = QtWebKit.QWebView()
        #Se habilita el atributo de plugins
        self.web.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled,True)
        #Se carga la pagina de debian venezuela al inicio
        self.web.load(QtCore.QUrl("http://www.debian.org.ve"))


        #Empaquetamiento de los widgets en una cuadricula.
        grid = QtGui.QGridLayout()
        grid.setSpacing(10)
        #Se agrega la entrada de datos
        grid.addWidget(self.entradaUrl, 1, 0)
        #Se agrega el boton navegar al lado de la
        #entrada de datos
        grid.addWidget(navegar,1,1)
        #Se agrega el widget web
        grid.addWidget(self.web,2,0)
        #Se agrega el boton salir
        grid.addWidget(quit,3,0)

        #Se define el layout pasando la grilla
        self.setLayout(grid)

        #Se define la asociacion de segnales:
        #Se define la segnal del boton quit, salir del programa
        self.connect(quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()'))
        #Se define la segnal del boton navegar, al darle clip se ejecuta el metodo navegar
        self.connect(navegar,QtCore.SIGNAL('clicked()'),self.navegar)
        #Se define la segnal de la entrada de datos
        #Al darle enter se ejecuta el metodo navegar
        self.connect(self.entradaUrl,QtCore.SIGNAL('returnPressed()'),self.navegar)


    def navegar(self):
        #Navegar captura el texto de la entrada de datos
        #Y se carga la nueva pagina.
        url = self.entradaUrl.text()
        self.web.load(QtCore.QUrl("%s" %url))





#Se ejecuta el programa principal
if __name__ == "__main__":    
   #Se instancia la clase QApplication    
   app = QtGui.QApplication(sys.argv)    
   #Se instancia el objeto QuitButton    
   qb = App()    
   #Se muestra la aplicacion    
   qb.show()    
   #Se sale de la aplicacion    
   sys.exit(app.exec_())

A continuación se muestra la ventana del navegador al ejecutar el programa:

Navegador web con PyQt - página www.debian.org

La siguiente figura muestra que se escribe un url nuevo y se puede darle clip al botón ir o darle enter a la entrada de datos:

Navegador web con PyQt - página www.google.com

===

¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV

O Escaneando el código QR desde billetera:

17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV