¿Hay alguna diferencia entre las cadenas QFileDialog en PyQt4 y PyQt5?

Soy muy nuevo en Python, así que ten paciencia. Tengo un bloque de código que abre un QFileDialog usando Python 3 y PyQt5:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog import sys class MCVE(QWidget): def __init__(self): super().__init__() self.initialize() def initialize(self): self.setWindowTitle('MCVE') self.setGeometry(50, 50, 400, 200) btn = QPushButton('Example', self) btn.clicked.connect(self.clicked) self.show() def clicked(self): filename = QFileDialog.getOpenFileName( self, "Open Template", "c:\\", "Templates (*.xml);;All Files (*.*)") print(filename) if __name__ == '__main__': app = QApplication(sys.argv) ex = MCVE() sys.exit(app.exec_()) 

En Python 2 usando PyQt4, la statement de impresión (nombre de archivo), después de presionar el botón de cancelar, se muestra como una cadena vacía. Cuando ejecuto el mismo código en Python 3 usando PyQt5 obtengo:

(”, ”)

NOTA: Las cotizaciones son cotizaciones individuales.

¿Alguien puede explicar lo que está pasando? No pude encontrar nada en la documentación entre PyQt4 y PyQt5. Sé que las cadenas cambiaron entre Python 2 y Python 3, pero no estoy seguro de que esos cambios causen un problema como este. ¡Gracias!

    La función getOpenFileName en PyQt4 devuelve una cadena que es el nombre del archivo seleccionado, y si no se selecciona ninguna, devuelve una cadena vacía.

     filename = QFileDialog.getOpenFileName(self, "Open Template", "c:\\", "Templates (*.xml);;All Files (*.*)") 

    Sin embargo, en PyQt5 esto devuelve una tupla de 2 elementos donde el primero es una cadena que tiene el mismo comportamiento que en PyQt4, y el segundo elemento es el filtro usado.

     filename, filters = QFileDialog.getOpenFileName(self, "Open Template", "c:\\", "Templates (*.xml);;All Files (*.*)") 

    Nota: la mayoría de la documentación de PyQt5 está en Qt5, ya que en general los nombres de los métodos, las entradas y el resultado son similares.