python pyqt pyqt4 pyqt5 qfiledialog

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



(1)

La función getOpenFileName en PyQt4 devuelve una cadena que es el nombre del archivo seleccionado, y si no se selecciona ninguno, 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 utilizado.

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.

Tengo un bloque de código que abre un QFileDialog usando Python3 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 instrucción print (nombre de archivo), después de presionar el botón cancelar, se muestra como una cadena vacía. Cuando ejecuto el mismo código en Python 3 usando PyQt5 obtengo:

('''', '''')

NOTA: Las cotizaciones son comillas simples

¿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!