Ya vengo programando en Python hace algo de tiempo y todos los fines de semana de enero del 2011 he estado en un taller de QT, así que ya es hora de ver que pueden hacer juntos Python y QT en algo conocido como PyQt4.

Recordando que mi lap tiene OpenSuse, lo primero revisar si está instalado el paquete «python-qt4», si no pues a usar «zypper in python-qt4».

Y ahora si no haré esperar más a estas teclas que piden a gritos ser acariciadas para crear el primer programa en PyQt4 y consiste en crear una venta vacía

El hola mundo que todos queremos ver

El archivo holamundo.pyw contiene el siguiente código

import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)

widget = QtGui.QWidget()
widget.resize(640,480)
widget.setWindowTitle('Hola mundo PyQT')
widget.show()

sys.exit(app.exec_())

y se ejecuta con el comando

$ python holamundo.pyw
o
$ chmod u+x holamundo.pyw
$ ./holamundo.pyw

y el resultado obtenido es

sencillo noooo!!

Ahora se colocará un mensaje contextual al colocar el puntero del ratón sobre la ventana

El código es el siguiente y ahora con comentarios 😉

import sys
# Importa todos los elementos necesario para PyQt
from PyQt4 import QtGui
from PyQt4 import QtCore

# Se hereda mensaje de la clase QtGui.QWidget
class mensaje(QtGui.QWidget):
    # Se define el constructor de la clase __init__ y se define que mensaje será
    # el objeto padre de todos las demás.
    def __init__(self, parent=None):
        # Se llama al constructor de la clase padre
        QtGui.QWidget.__init__(self, parent)
        
        # Las 2 línea siguientes definen posición, tamaño y título de la ventana
        self.setGeometry(300,300,250,130)
        self.setWindowTitle('Mensaje sobre ventana')

        self.setToolTip('Esto es un <b><i>QWidget</i></b> en PyQt4')
        QtGui.QToolTip.setFont(QtGui.QFont('OldEnglish',10))
        
# Esto es requerido por todas las aplicaciones PyQt
app = QtGui.QApplication(sys.argv)

# Se crea una instancia de mensaje
tooltip = mensaje()
# Se muestra el elemento en pantalla
tooltip.show()

# Se ejecuta y expera a que termine la aplicación
sys.exit(app.exec_())

el resultado es el siguiente

sigue no siendo tan complicado, entonces habrá que hacer algo más laborioso 😉

Usando un MainWindow con barra de estado, menú y un botón

Aquí está la sección de código que define la clase VentanaPrincipa, el constructor y las propiedades de la ventana misma.

# Se hereda de la clase QtGui.QMainWindow
class VentanaPrincipal(QtGui.QMainWindow):
    # Se define el constructor de la clase __init__ y con se requiere de los
    # parámetros ancho y alto de la ventana
    def __init__(self, ancho, alto):
        # Se llama al constructor de la clase padre
        QtGui.QMainWindow.__init__(self)
        
        # Se definen las propiedades de la ventana
        self.setGeometry(100,100,alto,ancho)
        self.setWindowTitle('Usando un MainWindow')
        self.setToolTip('Ventana')
        self.statusBar().showMessage('Lista ventana MainWindow')

Ahora el código del botón que al dar click cerrará la ventana

        # Se crea y definen propiedades del botón
        quit = QtGui.QPushButton('Cerrar', self)
        quit.setToolTip(u'Botón salir')
        quit.setGeometry((ancho-50)/2,(alto-50)/2,50,35)
        quit.setStatusTip(u'Botón salir')
        self.connect(quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()'))

Y finalmente el código para la barra de menú y la opción para salir de la ventana

        # Se crea el elemento del menu salir y sus propiedades
        msalir = QtGui.QAction(QtGui.QIcon('Smiley_Happy.png'),'Cerrar', self)
        msalir.setToolTip('Menu salir')
        msalir.setShortcut('Ctrl+Q')
        msalir.setStatusTip('Menu salir')
        self.connect(msalir, QtCore.SIGNAL('triggered()'),QtGui.qApp, QtCore.SLOT('quit()'))
        
        # Se crea la barra de menu y se definen sus propiedades
        menu = self.menuBar()
        menu.setToolTip('Menu')
        archivo = menu.addMenu('&Archivo')
        archivo.addAction(msalir)

Para usar esta clase se emplea el siguiente código

# Esto es requerido por todas las aplicaciones PyQt
app = QtGui.QApplication(sys.argv)
# Se crea una instancia de la clase
principal = VentanaPrincipal(320,280)
# Se muestra el elemento en pantalla
principal.show()
# Se ejecuta y expera a que termine la aplicación
sys.exit(app.exec_())

Y el resultado es

Y esto todo por hoy!

Referencias