0

He creado una modal de exportación de datos a excel y mi problema es que abre dicha modal pero a continuación cierra dicha modal, sin permitirme seleccionar la acción de abrir o guardar:

class modalExportacion(QWidget):
ruta = ""
fichero_actual = ""

def __init__(self, df): 
    QWidget.__init__(self)

    self.df = df
    self.setWindowTitle("Exportacion a excel")

    contenedor = QGridLayout()
    self.setLayout(contenedor)

    label_3 = QLabel()
    label_3.setObjectName("label_3")
    label_3.setText("Desea abrir o guardar el excel?")
    contenedor.addWidget(label_3, 1, 0)

    btnAbrir = QPushButton("Abrir",None)
    contenedor.addWidget(btnAbrir,2, 0)
    btnAbrir.clicked.connect(self.abrir)

    btnGuardar = QPushButton("Guardar",None)
    contenedor.addWidget(btnGuardar, 2, 1)
    btnGuardar.clicked.connect(self.guardar)

    self.show()


def abrir(self):
    nombreFichero = "Temporal"+datetime.datetime.now().isoformat()+".xlsx"
    handle, fn = tempfile.mkstemp(suffix='.xlsx')
    writer = pd.ExcelWriter(nombreFichero, engine='openpyxl')
    self.df.toexcel(writer)

def guardar(self):
    options = QFileDialog.Options()
    fileName, _ = QFileDialog.getSaveFileName(self,"Guardar como...","","Excel (*.xls);;Todos los tipos (*)", options=options)
    if fileName:
        #escribimos los datos con pandas
        self.df.to_excel(fileName, index=False)
Pikoh
  • 17,305
  • 9
  • 38
  • 54
Adriana_0_0
  • 161
  • 10
  • 1
    Prueba a quitar la línea del final: if(not self.isVisible()): return True – Javi Mollá Aug 27 '18 at 11:06
  • Hola Adriana, al hilo de lo que comenta Javier, el método [`__init__`](https://es.stackoverflow.com/a/63451/15089) nunca debe retornar nada (su retorno ha de ser simpre `None`). Esto en realidad causaría una excepción de cumplirse el condicional, lo cual causaría el cierre de la app. El condicional está después de `show()`, habría que ver cómo y dónde instancias la clase y si la app termina o no con una excepción para ver la causa real del cierre. El condicional ahí no tiene mucho sentido, si quieres una ventana modal, ¿Por qué no derivas de `QDialog` y usas el método y `setModal()`? – FJSevilla Aug 27 '18 at 11:58
  • Me expresé mal, no acaba con la ejecución del programa, me refiero a que termina de realizar la acción y cierra la modal. Es un abre y cierra de la modal mpidiendo ver dicha ventana. El return se lo añadí para intentar controlar el cierre de esta modal. Se lo he quitado pero me sigue ocurriendo lo mismo. – Adriana_0_0 Aug 28 '18 at 06:09

0 Answers0