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: