Créate tus propias web apps con Python y Qt con estos sencillos pasos

Creando web apps con Python y Qt

Las web apps llegaron para quedarse, y cada vez se usan más. Hace tiempo, servicios como Twitter eran muy diferentes, siendo ahora una especie de aplicaciones móviles que se adaptan a la pantalla del dispositivo con el que entremos. Pero lo malo de estas aplicaciones es que se ejecutan en el navegador, y hoy en día hay pocos navegadores que no demanden bastantes recursos. Haberlos haylos, pero ¿y si hubiera algo aún más ligero, incluso más que lo que ofrece Linux Mint?

Claro, podemos usar un navegador basado en Chromium y crear un acceso directo o instalar la aplicación y lo que tendremos será como una pestaña suelta que consumirá menos recursos que el navegador completo. Es cierto, esta es una posibilidad, pero, dependiendo de la web que tenga que cargar, el peso puede variar, y, en mi opinión, no es para nada bajo. Qt ofrece un widget que es para mostrar contenido web, y el secreto aquí es crear una aplicación sencilla que cargue esa web por medio de Python. Es posible con otros lenguajes, pero Python es el más asequible.

Cómo crear una web app con Python

Para poder seguir adelante, hay que tener instalados varios paquetes. Claro está, si queremos ejecutar la web app con Python, necesitaremos Python; la versión de nuestra distribución debe valer. También es necesario tener instalado el paquete webengine de PyQt5 (el de PyQt6 también vale, pero el código variará), y su nombre exacto dependerá de la distro en la que estemos. En Arch Linux y derivados se encuentra como python-pyqt5-webengine, y en Ubuntu y derivados suele ser python3-pyqt5.qtwebengine. Una vez con esos paquetes instalados, ya lo tendríamos todo para crearnos nuestras propias web apps. Los pasos a seguir serían estos:

  1. Creamos un archivo de texto nuevo. El nombre dará igual, pero merece la pena que sea descriptivo para que sepamos qué es. La extensión debe ser .py si vamos a usar Python.
  2. Pegamos este código, a explicar más adelante:
#!/usr/bin/env python3
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtWebEngineWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setGeometry(100, 100, 1200, 760)
        MainWindow.setMinimumSize(400, 500)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.webEngineView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
        self.verticalLayout.addWidget(self.webEngineView)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
    
        self.webEngineView.setUrl(QtCore.QUrl("https://pluto.tv"))
        self.webEngineView.setObjectName("webEngineView")
        MainWindow.setCentralWidget(self.centralwidget)
        


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Siendo Python, hay que tener cuidado con el sangrado, es decir, con los espacios que hay desde el borde izquierdo hasta la primera letra. Si no está bien y a la misma altura todo lo que corresponde a la misma clase o función, Python detecta que pertenece a otra parte y no funciona. Pero vamos paso a paso.

  1. Supongamos que lo que queremos es crearnos la app de Pluto TV, y que nuestro archivo se llama pluto.py. Hacemos clic secundario sobre pluto.py, vamos a las preferencias y lo marcamos como que es ejecutable. También podemos abrir un terminal y escribir:
chmod +x pluto.py
  1. Ahora deberíamos poder abrirlo con un doble clic, pero merece la pena hacerlo antes desde el terminal. Abrimos uno y escribimos python pluto.py. En algunas distribuciones puede que sea necesario cambiar «python» por «python3».
  2. Si vemos que se abre, ya tenemos nuestra web app creada. Podemos crearle un archivo .desktop para que aparezca en el menú de aplicaciones o lo que sea, pero la aplicación ya estaría creada. Los mensajes de error que aparecen en el terminal pueden ser ignorados si la app funciona.

Explicando el código

Del código anterior, la primera línea es el «shebang» indicando qué abrirá el archivo. A mí con ese me ha funcionado en cualquier distro Linux, pero puede variar en alguna. Lo que dice es que se abra con Python. Luego se crea una clase, un objeto de la ventana principal. Dentro tenemos la función que mostrará la interfaz de usuario. Los métodos .setGeometry() y .setMinimumSize() son para las dimensiones que tendrá al abrirse y cuál es el tamaño mínimo. En .setGeometry() hay que indicar también dos números (100,100); los otros sí son las dimensiones. Luego vienen las líneas que crean el widget para ver la página web y lo último (if __name__…) es lo que lanza la aplicación. La web app será la que haya entre las comillas que hay cerca del método QUrl.

Ojo: las web apps se muestran en un visor básico

Quien esté pensando en que esto es mejor que, no sé, instalarse Photopea en un navegador basado en Chromium, que se olvide. Claro está que se pueden mejorar estas web apps y que actúen como lo hacen con el navegador, pero no con los sencillos pasos que se incluyen en el titular. Esto va a servir para tener aplicaciones como YouTube, Pluto TV, Twitter… pero no se pueden descargar archivos, no guarda las contraseñas ni se pueden instalar extensiones.

Lo mejor de esto es que, justamente por ser sólo un visor básico y limitado, la aplicación web consumirá menos recursos que una de Chromium. En cuanto a Photopea, al no tener los widgets que piden dónde guardar los documentos, ni ninguna función que haga que se escriban en el disco duro, no se pueden guardar las imágenes. Yo sí he probado y sí se pueden subir arrastrando dentro de la ventana, pero no bajarla. En este caso concreto, lo que se puede hacer es compartir la edición, copiar el enlace que nos da y abrirlo en otra parte, pero el enlace abre justamente Photopea… Ya lo dije, es básico.

Pero básico no es inservible, y si puede ayudar a alguien, me alegraré.


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: AB Internet Networks 2008 SL
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.