Esta vez se explicara una aplicación que maneje varios widgets, una entrada de datos para capturar el nombre de una persona, un comboBox que maneja una lista de ciudades, se muestra el botón aceptar que al darle clip muestra la información escrita y seleccionada; y el botón salir que al darle clip se sale del programa, también se definio que al darle cerrar a la ventana abra una ventana de dialogo que confirma la salida de la aplicación y que la aplicación tenga una imagen como icono en su ventana.
La documentación de referencia de las clases de PyQt lo pueden revisar en este enlace.
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, QtCore #Se crea la clase App que hereda de la clase QWidget. class App(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) #Se define el tamano de la ventana self.setGeometry(400, 400, 250, 150) #Se le coloca un titulo a la ventana y se asocia un icono. self.setWindowTitle('Programa de prueba') self.setWindowIcon(QtGui.QIcon('./openlogo-50.png')) #Se define los widgets dentro de la ventana #Etiqueta nombre self.nombre = QtGui.QLabel('Nombre: ') #Entrada de datos del nombre self.nombreEdit = QtGui.QLineEdit() #Etiqueta ciudad. self.ciudadEtiqueta = QtGui.QLabel("Ciudad:") #Se define el comboBox con las ciudades self.combo = QtGui.QComboBox(self) ciudades = ["Valencia","Maracay","Barquisimeto","Merida","Caracas"] for ciudad in ciudades: self.combo.addItem(ciudad) #Se define la etiqueta resultado #con campo de nombre y ciudad y 2 #etiquetas donde se mostraran los resultados. self.resultado = QtGui.QLabel("Resultados: ") self.resultadoNombre = QtGui.QLabel("") self.resultadoCiudad = QtGui.QLabel("") self.etiquetaNombre = QtGui.QLabel("Info nombre:") self.etiquetaCiudad = QtGui.QLabel("Info Ciudad:") #Se define el boton para salir quit = QtGui.QPushButton('Salir', self) #Se define el boton aceptar okButton = QtGui.QPushButton("Aceptar",self) #Se define como empaquetar los widgets. #En este caso se usa grilla. #Se crea la instancia grid = QtGui.QGridLayout() grid.setSpacing(10) #Se agrupan los widgets pasando el #objeto luego el orden en vertical, el orden en #horizontal. grid.addWidget(self.nombre, 1, 0) grid.addWidget(self.nombreEdit, 1, 1) grid.addWidget(self.ciudadEtiqueta,2,0) grid.addWidget(self.combo,2,1) grid.addWidget(self.resultado,3,0) grid.addWidget(self.etiquetaNombre,4,0) grid.addWidget(self.resultadoNombre,4,1) grid.addWidget(self.etiquetaCiudad,5,0) grid.addWidget(self.resultadoCiudad,5,1) grid.addWidget(okButton, 6, 0) grid.addWidget(quit, 6, 1) #Se define el layout pasando la grilla self.setLayout(grid) #Se asocian las segnales del boton salir y aceptar #Se conecta el boton quit, con la segnal pasandole el evento clicked, y se #llama a qApp. en el boton aceptar se llama a buttonClicked. self.connect(quit, QtCore.SIGNAL('clicked()'),QtGui.qApp, QtCore.SLOT('quit()')) self.connect(okButton, QtCore.SIGNAL('clicked()'), self.buttonClicked) def buttonClicked(self): """Metodo del boton aceptar que captura la informacion del campo nombre y del comboBox ciudad y la muestra en 2 etiquetas como resultado """ #Se captura la entrada de datos del nombre y se le pasa #a la etiqueta resultadoNombre self.resultadoNombre.setText(self.nombreEdit.text()) #Se captura la seleccion del combo y se le pasa a la #etiqueta resultadoCiudad. self.resultadoCiudad.setText(self.combo.currentText()) def closeEvent(self, event): """Evento que permite abrir una ventana de dialogo para confirmar la salida del programa """ #Se genera la respuesta de la confirmacion de salir reply = QtGui.QMessageBox.question(self, 'Mensaje', "Seguro que desea salir?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) #Si se selecciona Si se acepta el evento, si se selecciona #no se ignora el evento if reply == QtGui.QMessageBox.Yes: event.accept() else: event.ignore() #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 la venta de la aplicación al iniciarse:
Se escribe el nombre y se selecciona la ciudad y se le da clip al botón aceptar:
Se muestra el resultado luego de darle clip al botón aceptar:
Se le da clip para cerrar ventana:
Y pregunta si desea confirmar salir de la aplicación:
2 comentarios:
Ernesto, he estado buscando la manera de que se desplieguen "datos x" al momento de interactuar con el QComboBox, por ejemplo al cambiar de item. Intenté con las señales 'clicked()', 'currentItemChange()' pero no funciona, ¿Conoces alguna forma? Quiero evitar lo más posible la interacción con el mouse en mi aplicación
Que tal Ernesto, he estado intentando que mi programa despliegue sierta nformación al momento de elegir un item en mi QComboBox sin necesidad de dar click en algún botón pero no he podido lograrlo. He usado las señales 'clicked()', 'currentItemChanged()' pero no da resultado, ¿Conoces alguna forma?
Publicar un comentario