PyQt - Widget QFileDialog

Este widget é uma caixa de diálogo do seletor de arquivos. Ele permite que o usuário navegue pelo sistema de arquivos e selecione um arquivo para abrir ou salvar. O diálogo é invocado por meio de funções estáticas ou chamando a função exec_ () no objeto de diálogo.

Funções estáticas de QFileDialog class (getOpenFileName () e getSaveFileName ()) chamam o diálogo de arquivo nativo do sistema operacional atual.

Um filtro de arquivo também pode ser aplicado para exibir apenas arquivos das extensões especificadas. O diretório inicial e o nome do arquivo padrão também podem ser definidos.

Métodos e enumerações importantes da classe QFileDialog estão listados na tabela a seguir -

Sr. Não. Métodos e Descrição
1

getOpenFileName()

Retorna o nome do arquivo selecionado pelo usuário para abri-lo

2

getSaveFileName()

Usa o nome do arquivo selecionado pelo usuário para salvar o arquivo

3

setacceptMode()

Determina se a caixa de arquivo funciona como uma caixa de diálogo aberta ou salva

QFileDialog.AcceptOpen

QFileDialog.AcceptSave

4

setFileMode()

Tipo de arquivos selecionáveis. As constantes enumeradas são -

QFileDialog.AnyFile

QFileDialog.ExistingFile

QFileDialog.Directory

QFileDialog.ExistingFiles

5

setFilter()

Exibe apenas os arquivos com as extensões mencionadas

Exemplo

Ambos os métodos de invocar a caixa de diálogo de arquivo são demonstrados no exemplo a seguir.

O primeiro botão invoca a caixa de diálogo do arquivo pelo método estático.

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

O arquivo de imagem selecionado é exibido em um widget de etiqueta. O segundo botão invoca o diálogo de arquivo chamando o método exec_ () no objeto QFileDialog.

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

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

O conteúdo do arquivo selecionado é exibido no widget TextEdit.

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

O código completo é o seguinte -

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

O código acima produz a seguinte saída -