PyQt5 QFileDialog小部件
此小部件是一个文件选择对话框。它使用户能够浏览文件系统并选择要打开或保存的文件。对话框可以通过静态函数或在对话框对象上调用 exec_() 函数来调用。
QFileDialog 类的静态函数( getOpenFileName() 和 getSaveFileName() )调用当前操作系统的本机文件对话框。
还可以应用文件过滤器,以仅显示指定扩展名的文件。还可以设置起始目录和默认文件名。
QFileDialog类的重要方法和枚举在下表中列出 –
编号 | 方法和描述 |
---|---|
1 | getOpenFileName() 返回用户选择的打开的文件的名称 |
2 | getSaveFileName() 使用用户选择的文件名保存文件 |
3 | setacceptMode() 确定文件对话框的操作是打开还是保存 QFileDialog.AcceptOpen QFileDialog.AcceptSave |
4 | setFileMode() 可选择文件的类型。枚举常量如下 − QFileDialog.AnyFile QFileDialog.ExistingFile QFileDialog.Directory QFileDialog.ExistingFiles |
5 | setFilter() 仅显示具有指定扩展名的文件 |
示例
以下示例演示了调用文件对话框的两种方法。
第一个按钮通过静态方法调用文件对话框。
fname = QFileDialog.getOpenFileName(self, 'Open file', 'c:\\',"Image files (*.jpg *.gif)")
所选的图像文件显示在一个标签小部件上。第二个按钮通过在QFileDialog对象上调用exec_()方法来调用文件对话框。
dlg = QFileDialog() dlg.setFileMode(QFileDialog.AnyFile) dlg.setFilter("Text files (*.txt)") filenames = QStringList() if dlg.exec_(): filenames = dlg.selectedFiles()
所选文件的内容将显示在TextEdit小部件中。
f = open(filenames[0], 'r') with f: data = f.read() self.contents.setText(data)
完整的代码如下:
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets 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()
上述代码会产生如下输出 −
exec_()方法的完整代码如下:
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * class CustomDialog(QFileDialog): def __init__(self, *args, **kwargs): super(CustomDialog, self).__init__(*args, **kwargs) self.setWindowTitle("HELLO!") QBtn = QDialogButtonBox.Ok | QDialogButtonBox.Cancel self.buttonBox = QDialogButtonBox(QBtn) self.buttonBox.accepted.connect(self.accept) self.buttonBox.rejected.connect(self.reject) self.layout = QVBoxLayout() self.layout.addWidget(self.buttonBox) self.setLayout(self.layout) class filedialogdemo(QWidget): def __init__(self, parent = None): super(filedialogdemo, self).__init__(parent) layout = QVBoxLayout() 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 getfiles(self, s): print("click", s) dlg = CustomDialog(self) 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()
下面的代码会产生以下输出 −
选择的文件中的文本将显示在TextEdit控件中。
版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com