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 esto todo por hoy!
Referencias
Hola,
Buen post, gracias por colocar mi presentacion de slideshare en las referencias, me gustaria seguir escribiendo sobre pyqt, no se si podamos hacer algunos post en conjunto.
Hola Jesse
Me dá mucho gusto tu visita por acá, si te das cuenta mucho está basado en tus slides y considero importante darle el crédito a quien lo merece 😉 (en pro de la cultura libre!).
En cuanto a tu propuesta de que publiquemos algo en conjunto, estoy más dispuesto a ideas!!
Para el siguiente post estoy decidiendo entre hacer la aplicación que sugieren en el Lab L1 – L4 que es básicamente un editor de texto básico o realizar el famoso cliente de twitter!
Hola man, buen tuto. fijate que siguiendo tu primer ejemplo no puedo correrlo marca el siguiente error:
No protocol specified
holamundo.py: cannot connect to X server :0.0
uso un debian 6.0 tengo instalada python y qt4 uso kde
saludos
hi! que gusto que estés por este camino, en relación con el error pareciera como si no tuvieras modo X activo o estuviera restringido, voy a ver si consigo esa distro y hago unas pruebas, mientras revisa los permisos para el acceso al servidor X a ver si es por ahi.
Talves una manera sería ejecutar el comando «xhost +» antes de correr el script!
Salu2+
RT
es algo brillante lo que estan haciendo la verdad yo apenas estoy biendo las ventajas de python y me sigo sorprendiendo. antes estaba gustoso por matlab pero la verdad al ver todo lo que python y mas ofrecen me esta gustando este…espero sigan pasando sus ideas y conocimientos por que encuanto pueda yo lo hare…saludos
Hola Javier
un gusto que te pases por acá y bueno nunca es tarde para iniciar con algo y aunque matlab creo que tiene un fin diferente, python está incursionando en muchos áreas, bienvenido al mundo de python.
hey y ánimo con ese blog, salu2+
Hola quiero crear un login y al darle al botón entrar me abra una ventana con el menú y las opciones.. el detalle esta en que no se como levantar la ventana del menú(MainWindow.) desde la ventana login que no se si crearla con un QWidget o QDialog ??
Hola Maritini!
Humm, en teoría el MainWindow es lo que levantas primero y luego podrías crear un QDialgo donde muestres en login, si es verdadero, pues cierras el QDialog del login y te quedas con el MainWindow, si el login es erroneo pues o terminas la aplicación o solicitas que lo re intente, algo así sería la idea.
Salu2+