Inicio > Programing > Iniciando con Python y QT (PyQt4) – I

Iniciando con Python y QT (PyQt4) – I

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

Anuncios
Categorías:Programing Etiquetas: , ,
  1. 10 febrero, 2011 en 16:21

    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.

    • 11 febrero, 2011 en 00:24

      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!

  2. keyboard
    11 febrero, 2012 en 23:21

    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

    • 12 febrero, 2012 en 08:27

      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

  3. 25 abril, 2012 en 19:35

    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

    • 25 abril, 2012 en 20:21

      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+

  4. 12 marzo, 2016 en 20:27

    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 ??

    • 12 marzo, 2016 en 20:40

      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+

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

PiKon

3D Printing + Raspberry Pi Camera = PiKon Telescope

gvSIG blog

gvSIG project blog

Python Adventures

Welcome to the Jungle!

A %d blogueros les gusta esto: