Usar Qt desde Python

Python posee la biblioteca Tkinter para el desarrollo de aplicaciones gráficas; pero se puede recurrir a otras opciones interesantes para el mismo propósito.

Vamos a ilustrar esas opciones con mi entorno favorito: Qt. Si ya sabes Qt, entonces este es un buen camino para combinar las virtudes de ambos mundos; y si no conoces Qt, pues quizá te merezca la pena usar Tkinter si no pretendes hacer nada espectacular. Puedes echar un vistazo al tutorial “Al grano con Qt” para hacerte una idea.

Para que python puede emplear Qt, es necesario que haya un “binding”. Hay una lista de los principales “bindings” de Qt en la página oficial.

Para python hay dos “bindings” principales: PySide y PyQt. Son parecidos, así que es mejor que decidas tu el que prefieres y elijas en consonancia a tus necesidades. Yo voy a elegir PySide (no pienso explicar por qué).

Instalamos PySide en la Raspberry Pi:

$ sudo apt-get install python-pyside

Ahora ya podemos probar un ejemplo sencillo. Ahí va el listado que puedes copiar en el archivo qt-pyside.py:

from PySide.QtGui import QApplication, QPushButton


def saluda():
    print "Hola, Mundo."

app = QApplication([])
    
button = QPushButton("Dale que te pego")
button.clicked.connect(saluda)
button.show()

app.exec_()

Ahora ejecutamos

$ python qt-pyside.py

ejemplo-pyside

El que entienda de Qt, aprecia rápidamente la mínima diferencia entre desarrollar esto en C++ y en Python. En Python nos hemos cepillado un montón de historias con punteros, conexiones, tipos, etc. Guauuu!!

No está mal, ¿pero podría usar Qt Designer para hacer mis formularios?.
Pues claro.

Ya sea en la máquina virtual con Linux (Qt 5) o en la Raspberry (Qt 4), abrimos Qt Creator -> New file or project -> Qt -> Qt Designer Form y creamos un formulario a nuestro gusto. Supongamos que lo guardamos con el nombre mainwindow.ui

designer

Desde Python no se puede usar directamente este formulario. Antes hay que pasarle la “moto” (igualito que lo hace Qt para C++, solo que no lo ves).

Necesitamos herramientas adicionales que instalamos de la siguiente manera:

$ sudo apt-get install pyside-tools

Ahora aplicamos una de las herramientas al formulario de la siguiente manera:

$ pyside-uic mainwindow.ui -o mainwindow.py

Ya tenemos el formulario convertido a Python. Solo falta una clase que “envuelva” el formulario para que se pueda usar (igual que en Qt). Lo llamaremos main.py

# -*- coding: utf-8 -*-
# no sé si explicar lo de arriba o nó (¿ves la tilde de "sé ñoño?)

import sys 
from PySide.QtGui import *
from PySide.QtCore import *
from mainwindow import *
 
class MyApplication(QtGui.QMainWindow, Ui_MainWindow):
  def __init__(self, parent=None):
    super(MyApplication, self).__init__(parent)
    self.setupUi(self)
 
if __name__ == "__main__":
  app = QtGui.QApplication(sys.argv)
  window = MyApplication()
  window.show()
  sys.exit(app.exec_())

Y solo queda probar:

$ python main.py

designer-pyside

¡Tachánnnnn!

 

Esta entrada fue publicada en Sin categoría y etiquetada , . Guarda el enlace permanente.