Como hacer para llamar un QDialog y que este se resetee a sus valores originales?



  • 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_()
    

  • Moderators

    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



  • @LJJT como sugiere @juanki yo agregaría un método a mi QDialog para "limpiar" los datos. Una opción es llamarlo luego de cada exec() para no olvidarte, y cada vez que lo muestras nuevamente sabes que empieza "de cero"



  • @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
    

  • Moderators

    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


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.