-
Tengo un QMainWindow desde el que llamo a un Qdialog, el problema es que utilizo el Qdialog para obtener datos, todo funciona bien cuando se utiliza por primera vez, pero al utilizarlo de nuevo, si no introduzco nuevos valores y simplemente lo cierro, me retorna los últimos valores retornados. Cuando lo llamos desde MainWindow lo hago así:
self.dialog=primero.afiliacion() self.dialog.exec_()
-
Hola
Así de primeras se me ocurren dos posibles soluciones:
Una, que cada vez que vas a pedir los datos crees el formulario y lo destruyas cuando lo cierras u obtienes los datos.
Y la otra es que incluyas un método que limpie el formulario y lo llames justo después de obtener los datos.
¿Cual es mejor? Pues depende de cómo lo hagas, solo con las dos líneas de código que pusiste no se cual haría yo.
Un saludo
-
@juanki Muchas gracias por la respuesta, sin embargo como soy nueva en el tema no la entendí muy bien, te cuento de nuevo: tengo un archivo de python principal (principal) en el cual importo mi mainwindow (autorizaciones), con un botón llamo un qdialog (secundal), cuando es abierto la primera vez sin tomar valores y le doy click en cerrar, no sucede nada, pero si ya había llamado con anterioridad el qdialog(secundal) y oprimo cerrar, me retorna los valores seleccionados en la llamada inmediatamente anterior. El codigo que tengo es un poco extenso, pero voy a tratar de poner lo importante
from autorizaciones_2 import Ui_MainWindow class Principal(QtGui.QMainWindow): def __init__(self): QtGui.QWidget.__init__(self) self.ventana = Ui_MainWindow() self.ventana.setupUi(self) self.connect(self.ventana.pushButton_8,QtCore.SIGNAL('clicked()'),self.ingresar_servicios) def cups(ingresar_servicios): resultado=[] cod='' desc='' #toma lo que hay en texto para buscar servicios, ya sea por codigo o por palabra codigo=self.ventana.lineEdit_13.text() palabra=self.ventana.lineEdit_14.text() # evalua si el codigo es vacio busca por palabra, si la palabra es vacia #indica que no se puede generar la busqueda if codigo!='': consulta='SELECT * FROM cups WHERE id_cups='+str(codigo) resp=apuntador.execute(consulta) if resp!=0: for temp in apuntador: resultado.append((temp[0],temp[1])) else: QtGui.QMessageBox.critical(self, 'Error','Codigo no encontrado', QtGui.QMessageBox.Ok) self.ventana.lineEdit_13.clear() self.ventana.lineEdit_14.clear() elif palabra!='': resultado=[] consulta='SELECT * FROM cups WHERE descripcion like"%'+str(palabra)+'%"' resp=apuntador.execute(consulta) if resp!=0: for temp in apuntador: resultado.append((temp[0],temp[1])) else: QtGui.QMessageBox.critical(self, 'Error','Palabra clave no encontrada', QtGui.QMessageBox.Ok) self.ventana.lineEdit_13.clear() self.ventana.lineEdit_14.clear() else: QtGui.QMessageBox.critical(self, 'Error','Digite codigo o palabra clave', QtGui.QMessageBox.Ok) if resultado!=[]: self.dialogo=secundal.buscar_cups(resultado,resp) self.dialogo.exec_() cod,desc=secundal.buscar_cups(resultado,resp).retorno() print 'principal:',cod,unicode(desc) if cod!='': self.ventana.lineEdit_13.clear() self.ventana.lineEdit_14.clear() fila=self.ventana.tableWidget.rowCount() if e_ingresarservicios==1: self.ventana.tableWidget.setItem(fila-1,0,QtGui.QTableWidgetItem(str(cod))) self.ventana.tableWidget.setItem(fila-1,1,QtGui.QTableWidgetItem('0')) self.ventana.tableWidget.setItem(fila-1,2,QtGui.QTableWidgetItem(unicode(desc))) e_ingresarservicios=0 elif e_ingresarservicios==0: self.ventana.tableWidget.insertRow(fila) self.ventana.tableWidget.setItem(fila,0,QtGui.QTableWidgetItem(str(cod))) self.ventana.tableWidget.setItem(fila,1,QtGui.QTableWidgetItem('0')) self.ventana.tableWidget.setItem(fila,2,QtGui.QTableWidgetItem(unicode(desc)))
en el archivo de secundal tengo lo siguiente:
import sys from busqueda_cups import Ui_Dialog from PyQt4 import QtCore, QtGui import os import MySQLdb ##---------------------------------------------------------------------------------------------------------- id_consulta='' descripcion='' ##---------------------------------------------------------------------------------------------------------- class buscar_cups(QtGui.QDialog): ## def __init__(self): ## def __init__(self,id_cups,descripcion,resultado,num_filas): def __init__(self,resultado,num_filas): ## global seleccion QtGui.QWidget.__init__(self) self.ventana = Ui_Dialog() self.ventana.setupUi(self) self.ventana.tableWidget.setRowCount(num_filas) for i in range(0,len(resultado)): for j in range(0,2): self.ventana.tableWidget.setItem(i,j,QtGui.QTableWidgetItem(str(resultado[i][j]))) self.connect(self.ventana.tableWidget,QtCore.SIGNAL('cellDoubleClicked (int,int)'),self.seleccion) ## self.connect(self.ventana.tableWidget,QtCore.SIGNAL(' itemSelectionChanged ()'),self.seleccion) def seleccion(self): global id_consulta,descripcion id_consulta='' descripcion='' cod,desc=self.ventana.tableWidget.selectedItems() id_consulta=cod.text() descripcion=desc.text() self.close() def retorno(self): return id_consulta,descripcion
-
Hola @LJJT
Bueno, python y yo no nos llembamos muy bien, junto con javascript, son dos lenguejes que no me gustan nada.
Así que no puedo ponerte un ejemplo, pero lo que tienes que hacer es dentro de tu clase secundal crear un método que se llame limpiar, por ejemplo, en que lo que haces es eliminar el contenido de todos los QLineEdit (o los controles que uses para pedir los datos al usuario) y lo llamas después de que hayas obtenido y procesado los datos que introdujo el usuario.
Así, la próxima vez estarán vacíos para que el usuario los llene de nuevo.
Un saludo