QFileDialog 文件选择对话框
- 描述
- 提供了一个对话框,允许用户选择文件或目录
- 允许用户遍历文件系统,以选择一个或多个文件或目录
- 继承自:QDialog
- 功能作用
-
静态方法(最简单的获取方式)
- 获取文件
# 单文件选择对话框 # 打开单文件选择对话框,返回包含str类型文件全路径和文件过滤器选项的元组 getOpenFileName(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs) # getOpenFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[str, str] # 打开单文件选择对话框,返回包含QUrl类型文件全路径和文件过滤器选项的元组 getOpenFileUrl(self, parent, caption, directory, *args, **kwargs) # getOpenFileUrl(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[QUrl, str] # 多文件选择对话框 # 打开多文件选择对话框,返回包含所有str类型文件全路径的列表和文件过滤器选项的元组 getOpenFileNames(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs) # getOpenFileNames(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[List[str], str] # 打开多文件选择对话框,返回包含所有QUrl类型文件全路径的列表和文件过滤器选项的元组 getOpenFileUrls(self, parent, caption, directory, *args, **kwargs) # getOpenFileUrls(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[List[QUrl], str] # 文件保存对话框 # 打开文件保存对话框,返回包含str类型的保存文件全路径和文件过滤器选项的元组 getSaveFileName(self, parent, caption, directory, filter, initialFilter, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs) # getSaveFileName(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0) -> Tuple[str, str] # 打开文件保存对话框,返回包含QUrl类型的保存文件全路径和文件过滤器选项的元组 getSaveFileUrl(self, parent, caption, directory, *args, **kwargs) # getSaveFileUrl(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '', initialFilter: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = 0, supportedSchemes: Iterable[str] = []) -> Tuple[QUrl, str] # 参数说明 # parent:父对象 # caption:对话框标题 # directory:默认打开路径 # filter:文件类型过滤器 # initialFilter:默认过滤文件类型 # options:选项控制
- 获取文件夹
# 文件夹选择对话框,返回str类型的所选择的文件夹路径 getExistingDirectory(self, parent, caption, directory, options, QFileDialog_Options, QFileDialog_Option, *args, **kwargs) # getExistingDirectory(parent: QWidget = None, caption: str = '', directory: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = QFileDialog.ShowDirsOnly) -> str # 文件夹选择对话框,返回QUrl类型的所选择的文件夹路径 getExistingDirectoryUrl(self, parent, caption, directory, *args, **kwargs) # getExistingDirectoryUrl(parent: QWidget = None, caption: str = '', directory: QUrl = QUrl(), options: Union[QFileDialog.Options, QFileDialog.Option] = QFileDialog.ShowDirsOnly, supportedSchemes: Iterable[str] = []) -> QUrl # 参数说明 # parent:父对象 # caption:对话框标题 # directory:默认打开路径 # options:选项控制
- 补充
- 过滤字符串格式:
名称1(*.jpg *.png);;名称2(*.py)
- 过滤字符串格式:
- 获取文件
-
构造函数
# 创建对象的同时设置父对象、设置选项控制 QFileDialog(QWidget, Union[Qt.WindowFlags, Qt.WindowType]) # 创建对象的同时设置父对象、对话框标题、默认路径、文件过滤器 QFileDialog(parent: QWidget = None, caption: str = '', directory: str = '', filter: str = '')
-
打开对话框
open(self) open(PYQT_SLOT) # 打开后, 会自动连接 filesSelected 信号与此处指定的槽函数PYQT_SLOT exec() -> int # 返回用户是否按下确定按钮
-
接收模式
setAcceptMode(QFileDialog.AcceptMode) # 设置接收模式 # 参数:QFileDialog.AcceptMode # QFileDialog.AcceptOpen # 打开模式 # QFileDialog.AcceptSave # 保存模式 acceptMode() -> QFileDialog.AcceptMode # 获取接收模式
-
默认保存后缀
setDefaultSuffix(str) # 设置默认保存后缀 defaultSuffix() -> str # 获取默认保存后缀
-
设置文件模式
setFileMode(QFileDialog.FileMode) # 设置文件模式 # 参数:QFileDialog.FileMode # QFileDialog.AnyFile # 选择单个文件对话框模式(不管文件是否存在,可以直接输入文件名打开不报错) # QFileDialog.ExistingFile # 选择单个现有文件对话框模式(文件是不存在,直接输入文件名打开会报错) # QFileDialog.ExistingFiles # 选择多个文件对话框模式 # QFileDialog.Directory # 选择文件夹对话框模式(显示文件名和文件夹名) # Windows文件对话框不支持在目录选择器中显示文件。 fileMode() -> QFileDialog.FileMode # 获取文件模式
-
设置文件过滤器
setNameFilter(str) # 通过字符串设置文件过滤器 setNameFilters(Iterable[str]) # 通过迭代器设置文件过滤器
-
文件显示模式(显示信息的详细程度...Win10无效)
setViewMode(QFileDialog.ViewMode) # 设置文件显示模式(Win10无效) # 参数:QFileDialog.ViewMode # QFileDialog.Detail # 显示详细信息 # QFileDialog.List # 显示列表 # 经测试, win10下不太灵光 viewMode() -> QFileDialog.ViewMode # 获文件显示模式
-
设置指定角色的标签名称
setLabelText(self, QFileDialog.DialogLabel, str) # 参数:QFileDialog.DialogLabel # QFileDialog.FileName # 文件名标签 # QFileDialog.Accept # 确定按钮 # QFileDialog.Reject # 取消按钮 # QFileDialog.FileType # 文件类型 # QFileDialog.LookIn #
-
- 可用信号
currentChanged(path_str) # 当前路径发生改变时,传递选中文件全路径的str对象 currentUrlChanged(QUrl) # 当前路径url发生改变时,传递选中文件全路径的QUrl对象 directoryEntered(directory_str) # 选中文件夹发生改变时,传递文件夹全路径的str对象 directoryUrlEntered(QUrl directory) # 选中文件夹发生改变时,传递文件夹全路径的QUrl对象 filterSelected(filter_str) # 选择名称过滤器时,传递所选择的过滤器名 fileSelected(str) # 最终确定选择文件时,传递一个str路径 urlSelected(QUrl url) # 最终确定选择文件时,传递一个QUrl对象 filesSelected([str]) # 最终确定选择多个文件时,传递包含多个str路径的列表 urlsSelected(List[QUrl]) # 最终确定选择多个文件时,传递包含多个QUrl对象的列表
- 代码示例
- 示例1:QFileDialog静态方法
from PyQt5.Qt import * import sys class Open_File(QWidget): def __init__(self,parent,*args,**kwargs): super().__init__(parent) self.resize(500, 40) self.btn = QPushButton(self) self.btn.resize(120, 30) self.btn.move(self.width() - 5 - self.btn.width(), 10) self.led = QLineEdit(self) self.led.move(10, 10) self.led.resize(self.width() - 3 * 5 - self.btn.width(), 30) def single_file(self,*args,**kwargs): btn_text = args[0] self.btn.setText(btn_text) def select_file(): caption = args[1] directory = args[2] filter = args[3] initialFilter = args[4] file = QFileDialog.getOpenFileName(self, caption, directory, filter, initialFilter) self.led.setText(file[0]) self.btn.clicked.connect(select_file) def multiple_files(self, *args, **kwargs): btn_text = args[0] self.btn.setText(btn_text) def select_file(): caption = args[1] directory = args[2] filter = args[3] initialFilter = args[4] file = QFileDialog.getOpenFileNames(self, caption, directory, filter, initialFilter) fn = ','.join(file[0]) self.led.setText(fn) self.btn.clicked.connect(select_file) def save_files(self, *args, **kwargs): btn_text = args[0] self.btn.setText(btn_text) def select_file(): caption = args[1] directory = args[2] filter = args[3] initialFilter = args[4] file = QFileDialog.getSaveFileName(self, caption, directory, filter, initialFilter) self.led.setText(file[0]) self.btn.clicked.connect(select_file) def open_direct(self, *args, **kwargs): btn_text = args[0] self.btn.setText(btn_text) def select_file(): caption = args[1] directory = args[2] file = QFileDialog.getExistingDirectory(self, caption, directory) self.led.setText(file) self.btn.clicked.connect(select_file) class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QFileDialog-静态方法') self.resize(500, 500) self.widget_list() def widget_list(self): self.add_widget() def add_widget(self): caption = '请选择一个文件' directory = './' filter = '所有文件(*.*);;Word文件(*.doc *.docx);;Excel文件(*.xls *.xlsx);;Python文件(*.py)' initialFilter = 'Python文件(*.py)' w0 = Open_File(self) w0.single_file('单文件浏览...',caption,directory,filter,initialFilter) w1 = Open_File(self) w1.multiple_files('多文件浏览...',caption,directory,filter,initialFilter) w1.move(0, 50) w2 = Open_File(self) w2.save_files('单文件保存...', caption, directory, filter, initialFilter) w2.move(0, 100) w3 = Open_File(self) w3.open_direct('选择文件夹', caption, directory) w3.move(0, 200) if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())
- 示例2:QFileDialog-功能作用
from PyQt5.Qt import * import sys class Windows(QWidget): def __init__(self): super().__init__() self.setWindowTitle('QFileDialog-功能作用') self.resize(500, 500) self.widget_list() def widget_list(self): self.add_widget() def add_widget(self): # ****************构造方法****************** 开始 # 方法一 filed1 = QFileDialog(self) # 方法二 filed = QFileDialog(self,'选择一个文件','./','所有文件(*.*);;Python文件(*.py);;Images(*.jpg *.png *.gif *.bmp)') # ****************构造方法****************** 结束 pass # ****************相关设置****************** 开始 # 设置接收模式 # filed.setAcceptMode(QFileDialog.AcceptOpen) # 打开模式 filed.setAcceptMode(QFileDialog.AcceptSave) # 保存模式 # 设置默认保存后缀 filed.setDefaultSuffix('.txt') # 设置文件模式 filed.setFileMode(QFileDialog.ExistingFiles) # 参数:QFileDialog.FileMode # QFileDialog.AnyFile # 选择单个文件对话框模式(不管文件是否存在,可以直接输入文件名打开不报错) # QFileDialog.ExistingFile # 选择单个现有文件对话框模式(文件是不存在,直接输入文件名打开会报错) # QFileDialog.ExistingFiles # 选择多个文件对话框模式 # QFileDialog.Directory # 选择文件夹对话框模式(显示文件名和文件夹名) # # Windows文件对话框不支持在目录选择器中显示文件。 # 通过文本设置文件过滤器 # filed.setNameFilter('所有文件(*.*);;Python文件(*.py);;Images(*.jpg *.png *.gif *.bmp)') # 通过迭代器设置文件过滤器 ls = ['所有文件(*.*)','Python文件(*.py)','Images(*.jpg *.png *.gif *.bmp)'] filed.setNameFilters(ls) # 设置文件显示模式(Win10无效) filed.setViewMode(QFileDialog.Detail) # 参数:QFileDialog.ViewMode # QFileDialog.Detail # 显示详细信息 # QFileDialog.List # 显示列表 # 设置指定角色的标签名称 filed.setLabelText(QFileDialog.FileName, '疯子的文件名') filed.setLabelText(QFileDialog.Accept, '疯子的确定') filed.setLabelText(QFileDialog.Reject, '疯子的取消') filed.setLabelText(QFileDialog.FileType, '疯子的文件类型') filed.setLabelText(QFileDialog.LookIn, '疯子的LookIn') # 参数:QFileDialog.DialogLabel # QFileDialog.FileName # 文件名标签 # QFileDialog.Accept # 确定按钮 # QFileDialog.Reject # 取消按钮 # QFileDialog.FileType # 文件类型 # QFileDialog.LookIn # # *****************相关设置***************** 结束 pass # ****************打开对话框****************** 开始 filed.open() # filed2.open() # ****************打开对话框****************** 结束 if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())
- 示例3:QFileDailog-可用信号
from PyQt5.Qt import * import sys class Window(QWidget): def __init__(self): super(Window, self).__init__() self.setWindowTitle('QFileDialog-可用信号') self.resize(500, 300) self.method_list() def method_list(self): self.add_child() def add_child(self): self.filed = QFileDialog(self) self.btn = QPushButton('浏览', self) self.led = QLineEdit(self) x = 3 y = 3 w = 100 h = 25 self.btn.resize(w, h) self.btn.move(x, y) self.led.resize(self.width() - 3 * x - self.btn.width(), self.btn.height()) self.led.move(self.btn.x()+self.btn.width()+x, self.btn.y()) filter_ls = ['所有文件(*.*)','Python文件(*.py)','文本文件(*.txt)','Excel文件(*.xls *.xlsx)','PDF文件(*.pdf)','Word文件(*.doc *.docx)'] self.filed.setNameFilters(filter_ls) self.filed.setFileMode(QFileDialog.ExistingFiles) self.btn.clicked.connect(self.select_file) # self.filed.open() def select_file(self): # 当前路径发生改变时,传递选中文件全路径的str对象 self.filed.currentChanged.connect(self.xinhao_cao) # 当前路径url发生改变时,传递选中文件全路径的QUrl对象 self.filed.currentUrlChanged.connect(self.xinhao_cao) # 选中文件夹发生改变时,传递文件夹全路径的str对象 self.filed.directoryEntered.connect(self.xinhao_cao) # 选中文件夹发生改变时,传递文件夹全路径的QUrl对象 self.filed.directoryUrlEntered.connect(self.xinhao_cao) # 选择名称过滤器时,传递所选择的过滤器名 self.filed.filterSelected.connect(self.xinhao_cao) # 最终确定选择文件时,传递一个str路径 self.filed.fileSelected.connect(self.xinhao_cao) # 最终确定选择文件时,传递一个QUrl对象 self.filed.urlSelected.connect(self.xinhao_cao) # 最终确定选择多个文件时,传递包含多个str路径的列表 self.filed.filesSelected.connect(self.xinhao_cao) # 最终确定选择多个文件时,传递包含多个QUrl对象的列表 self.filed.urlsSelected.connect(self.xinhao_cao) self.filed.open() def xinhao_cao(self,val): print(val) if __name__ == '__main__': app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())