PyQt: widget de QFileDialog
Este widget es un cuadro de diálogo de selección de archivos. Permite al usuario navegar por el sistema de archivos y seleccionar un archivo para abrir o guardar. El diálogo se invoca a través de funciones estáticas o llamando a la función exec_ () en el objeto de diálogo.
Funciones estáticas de QFileDialog class (getOpenFileName () y getSaveFileName ()) llaman al diálogo de archivo nativo del sistema operativo actual.
También se puede aplicar un filtro de archivo para mostrar solo archivos de las extensiones especificadas. También se pueden configurar el directorio de inicio y el nombre de archivo predeterminado.
Los métodos y enumeraciones importantes de la clase QFileDialog se enumeran en la siguiente tabla:
No Señor. | Métodos y descripción |
---|---|
1 | getOpenFileName() Devuelve el nombre del archivo seleccionado por el usuario para abrirlo |
2 | getSaveFileName() Utiliza el nombre de archivo seleccionado por el usuario para guardar el archivo |
3 | setacceptMode() Determina si el cuadro de archivo actúa como cuadro de diálogo para abrir o guardar QFileDialog.AcceptOpen QFileDialog.AcceptSave |
4 | setFileMode() Tipo de archivos seleccionables. Las constantes enumeradas son: QFileDialog.AnyFile QFileDialog.ExistingFile QFileDialog.Directory QFileDialog.ExistingFiles |
5 | setFilter() Muestra solo aquellos archivos que tienen extensiones mencionadas |
Ejemplo
Ambos métodos de invocar el diálogo de archivo se muestran en el siguiente ejemplo.
El primer botón invoca el diálogo de archivo por el método estático.
fname = QFileDialog.getOpenFileName(self, 'Open file',
'c:\\',"Image files (*.jpg *.gif)")
El archivo de imagen seleccionado se muestra en un widget de etiqueta. El segundo botón invoca el diálogo de archivo llamando al método exec_ () en el objeto QFileDialog.
dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter("Text files (*.txt)")
filenames = QStringList()
if dlg.exec_():
filenames = dlg.selectedFiles()
El contenido del archivo seleccionado se muestra en el widget TextEdit.
f = open(filenames[0], 'r')
with f:
data = f.read()
self.contents.setText(data)
El código completo es el siguiente:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class filedialogdemo(QWidget):
def __init__(self, parent = None):
super(filedialogdemo, self).__init__(parent)
layout = QVBoxLayout()
self.btn = QPushButton("QFileDialog static method demo")
self.btn.clicked.connect(self.getfile)
layout.addWidget(self.btn)
self.le = QLabel("Hello")
layout.addWidget(self.le)
self.btn1 = QPushButton("QFileDialog object")
self.btn1.clicked.connect(self.getfiles)
layout.addWidget(self.btn1)
self.contents = QTextEdit()
layout.addWidget(self.contents)
self.setLayout(layout)
self.setWindowTitle("File Dialog demo")
def getfile(self):
fname = QFileDialog.getOpenFileName(self, 'Open file',
'c:\\',"Image files (*.jpg *.gif)")
self.le.setPixmap(QPixmap(fname))
def getfiles(self):
dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter("Text files (*.txt)")
filenames = QStringList()
if dlg.exec_():
filenames = dlg.selectedFiles()
f = open(filenames[0], 'r')
with f:
data = f.read()
self.contents.setText(data)
def main():
app = QApplication(sys.argv)
ex = filedialogdemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
El código anterior produce la siguiente salida: