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 -