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!