PyQt - Widget QFileDialog
Questo widget è una finestra di selezione dei file. Consente all'utente di navigare nel file system e selezionare un file da aprire o salvare. Il dialogo viene richiamato tramite funzioni statiche o chiamando la funzione exec_ () sull'oggetto dialog.
Funzioni statiche di QFileDialog class (getOpenFileName () e getSaveFileName ()) chiamano la finestra di dialogo del file nativo del sistema operativo corrente.
È inoltre possibile applicare un filtro di file per visualizzare solo i file delle estensioni specificate. È inoltre possibile impostare la directory iniziale e il nome file predefinito.
I metodi e le enumerazioni importanti della classe QFileDialog sono elencati nella tabella seguente:
Sr.No. | Metodi e descrizione |
---|---|
1 | getOpenFileName() Restituisce il nome del file selezionato dall'utente per aprirlo |
2 | getSaveFileName() Utilizza il nome del file selezionato dall'utente per salvare il file |
3 | setacceptMode() Determina se la casella file funge da finestra di dialogo di apertura o di salvataggio QFileDialog.AcceptOpen QFileDialog.AcceptSave |
4 | setFileMode() Tipo di file selezionabili. Le costanti enumerate sono - QFileDialog.AnyFile QFileDialog.ExistingFile QFileDialog.Directory QFileDialog.ExistingFiles |
5 | setFilter() Visualizza solo i file che hanno menzionato le estensioni |
Esempio
Entrambi i metodi per richiamare la finestra di dialogo del file sono illustrati nel seguente esempio.
Il primo pulsante richiama la finestra di dialogo del file con il metodo statico.
fname = QFileDialog.getOpenFileName(self, 'Open file',
'c:\\',"Image files (*.jpg *.gif)")
Il file immagine selezionato viene visualizzato su un widget etichetta. Il secondo pulsante richiama la finestra di dialogo del file chiamando il metodo exec_ () sull'oggetto QFileDialog.
dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter("Text files (*.txt)")
filenames = QStringList()
if dlg.exec_():
filenames = dlg.selectedFiles()
Il contenuto del file selezionato viene visualizzato nel widget TextEdit.
f = open(filenames[0], 'r')
with f:
data = f.read()
self.contents.setText(data)
Il codice completo è il seguente:
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()
Il codice precedente produce il seguente output: