PyQt - Widget QFileDialog

Ce widget est une boîte de dialogue de sélection de fichiers. Il permet à l'utilisateur de naviguer dans le système de fichiers et de sélectionner un fichier à ouvrir ou à enregistrer. Le dialogue est appelé via des fonctions statiques ou en appelant la fonction exec_ () sur l'objet de dialogue.

Fonctions statiques de QFileDialog class (getOpenFileName () et getSaveFileName ()) appellent la boîte de dialogue de fichier native du système d'exploitation actuel.

Un filtre de fichier peut également être appliqué pour afficher uniquement les fichiers des extensions spécifiées. Le répertoire de départ et le nom de fichier par défaut peuvent également être définis.

Les méthodes et énumérations importantes de la classe QFileDialog sont répertoriées dans le tableau suivant -

N ° Sr. Méthodes et description
1

getOpenFileName()

Renvoie le nom du fichier sélectionné par l'utilisateur pour l'ouvrir

2

getSaveFileName()

Utilise le nom de fichier sélectionné par l'utilisateur pour enregistrer le fichier

3

setacceptMode()

Détermine si la boîte de fichier agit comme une boîte de dialogue d'ouverture ou d'enregistrement

QFileDialog.AcceptOpen

QFileDialog.AcceptSave

4

setFileMode()

Type de fichiers sélectionnables. Les constantes énumérées sont -

QFileDialog.AnyFile

QFileDialog.ExistingFile

QFileDialog.Directory

QFileDialog.ExistingFiles

5

setFilter()

Affiche uniquement les fichiers ayant des extensions mentionnées

Exemple

Les deux méthodes d'appel de la boîte de dialogue de fichier sont illustrées dans l'exemple suivant.

Le premier bouton appelle la boîte de dialogue de fichier par la méthode statique.

fname = QFileDialog.getOpenFileName(self, 'Open file', 
   'c:\\',"Image files (*.jpg *.gif)")

Le fichier image sélectionné s'affiche sur un widget d'étiquette. Le deuxième bouton appelle la boîte de dialogue de fichier en appelant la méthode exec_ () sur l'objet QFileDialog.

dlg = QFileDialog()
dlg.setFileMode(QFileDialog.AnyFile)
dlg.setFilter("Text files (*.txt)")
filenames = QStringList()

   if dlg.exec_():
      filenames = dlg.selectedFiles()

Le contenu du fichier sélectionné s'affiche dans le widget TextEdit.

f = open(filenames[0], 'r')
   with f:
      data = f.read()
      self.contents.setText(data)

Le code complet est le suivant -

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()

Le code ci-dessus produit la sortie suivante -