Navegador web simple con Qt 5/6 (PyQt/PySide)

Navegador web simple con Qt 5/6 (PyQt/PySide)

Actualizado el 29/10/2022.

Descarga: navegador-web-pyqt-pyside.zip.

Código de fuente de un navegador web simple usando PySide 6 o PyQt 5/6. Adaptado del original Navegador web simple con PyQt 4. Antes de correr el código, asegurarse de tener instalado los paquetes correspondientes, según el paquete utilizado (en caso de no saber, elegir PySide6):

Para PySide6:

pip install pyside6

Para PyQt6:

pip install PyQt6 PyQt6-WebEngine

Para PyQt5:

pip install PyQt5 PyQtWebEngine

Navegador web con PyQt5

#
#
#       Simple navegador web con PyQt/PySide.
#
#       Recursos Python - www.recursospython.com
#
#

import sys

from PySide6.QtCore import QUrl
from PySide6.QtWidgets import QApplication, QHBoxLayout, QLineEdit
from PySide6.QtWidgets import QMainWindow, QPushButton, QVBoxLayout
from PySide6.QtWidgets import QWidget
from PySide6.QtWebEngineWidgets import QWebEngineView


class Widgets(QMainWindow):
    
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Simple Web Browser")
        self.widget = QWidget(self)
        
        # Widget para el navegador
        self.webview = QWebEngineView()
        self.webview.load(QUrl("https://www.recursospython.com/"))
        self.webview.urlChanged.connect(self.url_changed)
        
        # Ir hacia atrás
        self.back_button = QPushButton("<")
        self.back_button.clicked.connect(self.webview.back)
        
        # Ir hacia adelante
        self.forward_button = QPushButton(">")
        self.forward_button.clicked.connect(self.webview.forward)
        
        # Actualizar la página
        self.refresh_button = QPushButton("Actualizar")
        self.refresh_button.clicked.connect(self.webview.reload)
        
        # Barra de direcciones
        self.url_text = QLineEdit()
        
        # Cargar la página actual
        self.go_button = QPushButton("Ir")
        self.go_button.clicked.connect(self.url_set)
        
        self.toplayout = QHBoxLayout()
        self.toplayout.addWidget(self.back_button)
        self.toplayout.addWidget(self.forward_button)
        self.toplayout.addWidget(self.refresh_button)
        self.toplayout.addWidget(self.url_text)
        self.toplayout.addWidget(self.go_button)
        
        self.layout = QVBoxLayout()
        self.layout.addLayout(self.toplayout)
        self.layout.addWidget(self.webview)
        
        self.widget.setLayout(self.layout)
        self.setCentralWidget(self.widget)
    
    def url_changed(self, url):
        """Actualizar la barra de direcciones"""
        self.url_text.setText(url.toString())
    
    def url_set(self):
        """Acceder a un nuevo URL"""
        self.webview.setUrl(QUrl(self.url_text.text()))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Widgets()
    window.show()
    sys.exit(app.exec())

#
#
#       Simple navegador web con PyQt/PySide.
#
#       Recursos Python - www.recursospython.com
#
#

import sys

from PyQt6.QtCore import QUrl
from PyQt6.QtWidgets import QApplication, QHBoxLayout, QLineEdit
from PyQt6.QtWidgets import QMainWindow, QPushButton, QVBoxLayout
from PyQt6.QtWidgets import QWidget
from PyQt6.QtWebEngineWidgets import QWebEngineView


class Widgets(QMainWindow):
    
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Simple Web Browser")
        self.widget = QWidget(self)
        
        # Widget para el navegador
        self.webview = QWebEngineView()
        self.webview.load(QUrl("https://www.recursospython.com/"))
        self.webview.urlChanged.connect(self.url_changed)
        
        # Ir hacia atrás
        self.back_button = QPushButton("<")
        self.back_button.clicked.connect(self.webview.back)
        
        # Ir hacia adelante
        self.forward_button = QPushButton(">")
        self.forward_button.clicked.connect(self.webview.forward)
        
        # Actualizar la página
        self.refresh_button = QPushButton("Actualizar")
        self.refresh_button.clicked.connect(self.webview.reload)
        
        # Barra de direcciones
        self.url_text = QLineEdit()
        
        # Cargar la página actual
        self.go_button = QPushButton("Ir")
        self.go_button.clicked.connect(self.url_set)
        
        self.toplayout = QHBoxLayout()
        self.toplayout.addWidget(self.back_button)
        self.toplayout.addWidget(self.forward_button)
        self.toplayout.addWidget(self.refresh_button)
        self.toplayout.addWidget(self.url_text)
        self.toplayout.addWidget(self.go_button)
        
        self.layout = QVBoxLayout()
        self.layout.addLayout(self.toplayout)
        self.layout.addWidget(self.webview)
        
        self.widget.setLayout(self.layout)
        self.setCentralWidget(self.widget)
    
    def url_changed(self, url):
        """Actualizar la barra de direcciones"""
        self.url_text.setText(url.toString())
    
    def url_set(self):
        """Acceder a un nuevo URL"""
        self.webview.setUrl(QUrl(self.url_text.text()))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Widgets()
    window.show()
    try:
        sys.exit(app.exec_())
    except AttributeError:
        sys.exit(app.exec())

#
#
#       Simple navegador web con PyQt/PySide.
#
#       Recursos Python - www.recursospython.com
#
#

import sys

from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication, QHBoxLayout, QLineEdit
from PyQt5.QtWidgets import QMainWindow, QPushButton, QVBoxLayout
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWebEngineWidgets import QWebEngineView


class Widgets(QMainWindow):
    
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Simple Web Browser")
        self.widget = QWidget(self)
        
        # Widget para el navegador
        self.webview = QWebEngineView()
        self.webview.load(QUrl("https://www.recursospython.com/"))
        self.webview.urlChanged.connect(self.url_changed)
        
        # Ir hacia atrás
        self.back_button = QPushButton("<")
        self.back_button.clicked.connect(self.webview.back)
        
        # Ir hacia adelante
        self.forward_button = QPushButton(">")
        self.forward_button.clicked.connect(self.webview.forward)
        
        # Actualizar la página
        self.refresh_button = QPushButton("Actualizar")
        self.refresh_button.clicked.connect(self.webview.reload)
        
        # Barra de direcciones
        self.url_text = QLineEdit()
        
        # Cargar la página actual
        self.go_button = QPushButton("Ir")
        self.go_button.clicked.connect(self.url_set)
        
        self.toplayout = QHBoxLayout()
        self.toplayout.addWidget(self.back_button)
        self.toplayout.addWidget(self.forward_button)
        self.toplayout.addWidget(self.refresh_button)
        self.toplayout.addWidget(self.url_text)
        self.toplayout.addWidget(self.go_button)
        
        self.layout = QVBoxLayout()
        self.layout.addLayout(self.toplayout)
        self.layout.addWidget(self.webview)
        
        self.widget.setLayout(self.layout)
        self.setCentralWidget(self.widget)
    
    def url_changed(self, url):
        """Actualizar la barra de direcciones"""
        self.url_text.setText(url.toString())
    
    def url_set(self):
        """Acceder a un nuevo URL"""
        self.webview.setUrl(QUrl(self.url_text.text()))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Widgets()
    window.show()
    sys.exit(app.exec_())

Curso online 👨‍💻

¡Ya lanzamos el curso oficial de Recursos Python en Udemy! Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.

Consultoría 💡

Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.

12 comentarios.

  1. Buenos días,

    Antes de nada, muchas gracias por el aporte.

    Cuando ejecuto el código me aparece el siguiente error:

    from PyQt5.QtWebEngineWidgets import QWebEngineView

    ImportError: QtWebEngineWidgets must be imported before a QCoreApplication instance is created

    Saludos

      • Hoa. Si he probado exactamente el mismo código, también he probado con otros ejemplos parecidos y me aparece el mismo error, además intentado cambiar el orden al importar pero tampoco se soluciona así.

  2. Hola! Tengo un problema: Cuando abro el navegador está todo bien. Pero cuando quiero ir a un sitio, la barra de direcciones tiene «about:blank» y la página esta totalmente en blanco. Muchas gracias por leer =)

  3. Hola buenas, tengo dos de preguntas espero que algun alma generosa pueda ayudarme :), mira soy nuevo en python y recien descubri esta pagina, muy didicactica por cierto y me encanta la interfaz que tiene, y queria descargarme este codigo para probarlo en mi pc, me he descargado el codigo, he instalado mediante el comando pip3 install PyQt5 el modulo para arrancar el programa pero me sale este error:

    from PyQt5.QtWebEngineWidgets import QWebEngineView
    ModuleNotFoundError: No module named ‘PyQt5.QtWebEngineWidgets’

    Por cierto tengo windows 10.

    Mi otra pregunta seria: Donde puedo encontrar informacion para trabajar con este modulo y poder crear cosas como este navegador por ejemplo de ante mano muchas gracias bye. :).

Deja una respuesta