7 jul. 2011

Manejo de Fecha y Hora con PyQt. Parte 5

En este artículo se creará una ventana con 2 pestañas, 2 botones, y una etiqueta; el primer botón capturará le fecha o fecha y hora según la pestaña seleccionada y lo presentará en la etiqueta, el otro botón es para salir de la aplicación; en la primera pestaña se muestra el widget de fecha y en la segunda se muestra el widget de fecha y hora.

Se utilizarán los siguientes widgets:

  • QtGui.QTabWidget: Permite crear pestañas.
  • QtGui.QDateEdit: Permite crear el widget incremental o decremental de la fecha.
  • QtGui.QDateTimeEdit: Permite crear el widget incremental o decremental de la fecha y hora.


Como se tiene un solo botón para capturar la fecha para ambas pestañas es necesario capturar el identificador de cada pestaña para así dependiendo del caso generar el resultado de la fecha u fecha y hora.

El código del programa se muestra a continuación:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
     
#Se importa el modulo sys
import sys


#De PyQt4 importar QtGui y QtCore
from PyQt4 import QtGui
from PyQt4 import QtCore


class App(QtGui.QWidget):
    def __init__(self,parent=None):
        QtGui.QWidget.__init__(self, parent)
        #Se define el tamano de la ventana
        self.setGeometry(500, 500, 350, 250)
        #Se le coloca un titulo a la ventana y se asocia un icono.
        self.setWindowTitle('Fecha y Hora')
        self.setWindowIcon(QtGui.QIcon('./openlogo-50.png'))
        
        #Se crea la instancia del widget de la fecha
        #Se define el formato de la fecha
        #Se le asigna al widget la fecha actual.
        self.fecha = QtGui.QDateEdit(self)
        self.fecha.setDisplayFormat("dd/MM/yyyy")
        self.fecha.setDate(QtCore.QDate.currentDate())
        
        
        
        #Se crea la instancia del widget de la fecha y hora.
        #Se le da formato a la fecha y hora.
        #Se le asigna la fecha y hora actual al widget.
        self.fechayhora = QtGui.QDateTimeEdit(self)
        self.fechayhora.setDisplayFormat("dd/MM/yyyy HH:mm:ss")
        self.fechayhora.setDateTime(QtCore.QDateTime.currentDateTime())
        
        #Se crea el boton que captura la fecha u hora
        captura1 = QtGui.QPushButton("Captura",self)
        #Se crea el boton para salir de la aplicacion
        quit = QtGui.QPushButton('Salir', self)
        
        #Se crea la etiqueta donde se muestra la fecha u hora
        self.etiqueta = QtGui.QLabel("Fecha:")
         
        #Se crea la instancia del widget pestagna
        #Se define que no se puede cerrar las pestagnas
        self.tab = QtGui.QTabWidget(self)
        self.tab.setTabsClosable(False)
        
        #Se agrega a la 1era pestagna el widget de la fecha
        self.tab.addTab(self.fecha,"Fecha")
        #Se agrega a la 2da pestagna el widget de la fecha y hora
        self.tab.addTab(self.fechayhora,"Fecha y Hora")


        #Empaquetamiento de los widgets en una cuadricula.
        grid = QtGui.QGridLayout()
        grid.setSpacing(10)
        #Se agrega el widget pestagna, boton de captura,
        #etiqueta y boton de salida.
        grid.addWidget(self.tab, 1, 0)
        grid.addWidget(captura1,2,0)
        grid.addWidget(self.etiqueta, 3, 0)
        grid.addWidget(quit,4,0)
        self.setLayout(grid)
        
        #Se conecta la segnal del boton captura con el evento clicked al
        #metodo mostrarIndice.
        self.connect(captura1,QtCore.SIGNAL('clicked()'),self.mostrarFechayHora)
        #Se asocia ala segnal del boton quit al evento clicked y se ejecuta la
        #salida del programa.
        self.connect(quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()'))
    
        
    def mostrarFechayHora(self):
        #Captura el indice de la pestagna para mostrar
        #la informacion de la fecha u fecha y hora.
        if self.tab.currentIndex() == 0:
            #Se presenta en la etiqueta la fecha con el
            #formato dia/mes/agno.
            #se toma la informacion de la funcion date del widget
            #este devuelve una fecha y se captura el dia, mes y agno.
            self.etiqueta.setText("Fecha: %s/%s/%s"
                                  %(self.fecha.date().day(),
                                    self.fecha.date().month(),
                                    self.fecha.date().year()) )
            
        else:
            #Se presenta en la etiqueta la informacion de la fecha y hora.
            #con el formato dia/mes/agno hora:minutos:segundos.
            #Se utiliza el metodo textFromDateTime que devuelve un string
            #pasandole una fecha y hora 
            self.etiqueta.setText("Fecha y Hora: %s"
                                  %self.fechayhora.textFromDateTime(self.fechayhora.dateTime()))
        
    
        


#Se ejecuta el programa principal
if __name__ == "__main__":    
   #Se instancia la clase QApplication    
   app = QtGui.QApplication(sys.argv)    
   #Se instancia el objeto QuitButton    
   qb = App()    
   #Se muestra la aplicacion    
   qb.show()    
   #Se sale de la aplicacion    
   sys.exit(app.exec_())

La figura muestra el programa al iniciarse:



La siguiente figura muestra que se modifico la fecha con los botones de incrementar o decrementar y luego se presionó al botón captura:



La siguiente figura muestra cuando se selecciona la segunda pestaña:



La última figura muestra que se modifico la fecha y la hora con los botones incrementales o decrementales y luego se presionó al botón captura:

Publicar un comentario en la entrada

AddThis