文件对话框 QFileDialog 用于打开或保存文件时获取文件路径和文件名。
在文件对话框中可以根据文件类型对文件进行过滤,只显示具有某些扩展名的文件。
文件对话框的界面分为两种,一种是 PySide6 提供的界面另一种是本机操作系统提供的界面,可以通过文件对话框的 setOption(QFileDialog.DontUseNativeDialog,bool)方法设置显示的是哪种界面。
对话框上的标签和按钮名称都可以通过对话框的属性进行修改。
用QFileDialog类创建文件对话框实例的方法如下所示其中
from PySide6.QtWidgets import QFileDialog
QFileDialog(parent: PySide6.QtWidgets.QWidget,f: PySide6.QtCore.Qt.WindowType)-> None
QFileDialog(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None,caption: str='',directory: str='',filter: str='')-> None
QFileDialog类允许用户遍历文件系统,以便选择一个或多个文件或目录。
创建QFileDialog最简单的方法是使用静态函数。
fileName = QFileDialog.getOpenFileName(self,
tr("Open Image"),"/home/jana",tr("Image Files(*.png *.jpg *.bmp)"))
在上面的示例中,使用静态函数创建了一个模态QFileDialog。对话框最初显示"/home/jana"目录的内容,并显示与字符串"图像文件(.png.jpg*.bmp)“中给定的模式匹配的文件。文件对话框的父级设置为此,窗口标题设置为"打开图像”。
如果要使用多个筛选器,请用两个分号分隔每个筛选器。例如:
"Images(*.png *.xpm *.jpg);;Text files(*.txt);;XML files(*.xml)"
您可以在不使用静态函数的情况下创建自己的QFileDialog。通过调用setFileMode(),可以指定用户必须在对话框中选择的内容:
dialog = QFileDialog(self)
dialog.setFileMode(QFileDialog.AnyFile)
在上面的示例中,文件对话框的模式设置为AnyFile,这意味着用户可以选择任何文件,甚至可以指定不存在的文件。此模式对于创建"另存为"文件对话框非常有用。如果用户必须选择现有文件,请使用ExistingFile;如果只能选择目录,请使用Directory。有关模式的完整列表,请参阅FileMode枚举。
fileMode属性包含对话框的操作模式;这指示了期望用户选择什么类型的对象。使用setNameFilter()设置对话框的文件筛选器。例如:
dialog.setNameFilter(tr("Images(*.png *.xpm *.jpg)"))
在上面的示例中,过滤器设置为"Images(.png.xpm*.jpg)",这意味着只有扩展名为png、xpm或jpg的文件才会显示在QFileDialog中。您可以使用setNameFilters()应用多个筛选器。使用selectNameFilter()选择您给定的过滤器之一作为文件对话框的默认过滤器。
文件对话框有两种视图模式:“列表"和"详细信息”。列表将当前目录的内容显示为文件名和目录名的列表。Detail还会显示文件名和目录名的列表,但会在每个名称旁边提供其他信息,例如文件大小和修改日期。使用setViewMode()设置模式:
dialog.setViewMode(QFileDialog.Detail)
创建自己的文件对话框时需要使用的最后一个重要函数是selectedFiles()。
fileNames = QStringList()
if dialog.exec():
fileNames = dialog.selectedFiles()
在上面的示例中,创建并显示了一个模式文件对话框。如果用户单击"确定",则他们选择的文件将放在fileName中。
对话框的工作目录可以用setDirectory()设置。可以使用selectFile()函数选择当前目录中的每个文件。
标准对话框示例显示了如何使用QFileDialog以及其他内置的Qt对话框。
默认情况下,如果平台有平台本机文件对话框,则会使用该对话框。在这种情况下,原本用于构建对话框的小部件将不会被实例化,因此相关的访问者(如layout()和itemDelegate())将返回null。此外,并非所有平台都显示带有标题栏的文件对话框,因此请注意,标题文本可能对用户不可见。您可以设置DontUseNativeDialog选项,以确保使用基于小部件的实现,而不是本机对话框。
属性 | 描述 | 访问功能 |
---|---|---|
acceptMode: AcceptMode | 此属性保留对话框的接受模式。 操作模式定义对话框是用于打开文件还是用于保存文件。 默认情况下,此属性设置为AcceptOpen。 |
acceptMode() setAcceptMode(mode) |
defaultSuffix: str | 如果没有指定其他后缀,此属性将保留添加到文件名的后缀。 此属性指定一个字符串,如果该字符串没有后缀,则该字符串将添加到文件名中。后缀通常用于表示文件类型(例如,"txt"表示文本文件)。 如果第一个字符是一个点(‘.’),它将被删除。 |
defaultSuffix() setDefaultSuffix(suffix) |
fileMode: FileMode | 此属性保存对话框的文件模式。 文件模式定义了用户希望在对话框中选择的项目的数量和类型。 默认情况下,此属性设置为AnyFile。 此函数将设置FileName和Accept DialogLabel的标签。可以在调用setFileMode()后设置自定义文本。 |
fileMode() setFileMode(mode) |
options: Options | 此属性包含影响对话框外观的各种选项。 默认情况下,所有选项都处于禁用状态。 在更改对话框财产或显示对话框之前,应设置选项(尤其是DontUseNativeDialogs选项)。 在对话框可见时设置选项并不能保证对对话框产生即时影响(取决于选项和平台)。 更改其他财产后设置选项可能会导致这些值无效。 |
options() setOptions(options) |
supportedSchemes: list of strings | 此属性包含文件对话框应允许导航到的URL方案。。 设置此属性可以限制用户可以选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示不应用任何限制(默认情况下)。支持本地文件("文件"方案)是隐式的,并且始终处于启用状态;没有必要将其包括在限制中。 |
supportedSchemes() setSupportedSchemes(schemes) |
viewMode: ViewMode | 此属性保留文件和目录在对话框中的显示方式。 默认情况下,"详细信息"模式用于显示有关文件和目录的信息。 |
viewMode() setViewMode(mode) |
PySide6.QtWidgets.QFileDialog.ViewMode
此枚举描述文件对话框的视图模式;即将显示关于每个文件的什么信息。
Constant | Description |
---|---|
QFileDialog.Detail | 显示目录中每个项目的图标、名称和详细信息。 |
QFileDialog.List | 仅显示目录中每个项目的图标和名称。 |
PySide6.QtWidgets.QFileDialog.FileMode
此枚举用于指示用户可以在文件对话框中选择什么;即如果用户点击OK,对话框将返回什么。
Constant | Description |
---|---|
QFileDialog.AnyFile | 文件的名称,无论它是否存在。 |
QFileDialog.ExistingFile | 单个现有文件的名称。 |
QFileDialog.Directory | 目录的名称。同时显示文件和目录。但是,本机Windows文件对话框不支持在目录选择器中显示文件。 |
QFileDialog.ExistingFiles | 零个或多个现有文件的名称。 |
PySide6.QtWidgets.QFileDialog.AcceptMode
Constant | Description |
---|---|
QFileDialog.AcceptOpen | |
QFileDialog.AcceptSave |
PySide6.QtWidgets.QFileDialog.DialogLabel
Constant | Description |
---|---|
QFileDialog.LookIn | |
QFileDialog.FileName | |
QFileDialog.FileType | |
QFileDialog.Accept | |
QFileDialog.Reject |
PySide6.QtWidgets.QFileDialog.Option
Constant | Description |
---|---|
QFileDialog.ShowDirsOnly | (继承enum.Flag)仅在文件对话框中显示目录。默认情况下,同时显示文件和目录。(仅在目录文件模式下有效。) |
QFileDialog.DontResolveSymlinks | 不要解析文件对话框中的符号链接。默认情况下会解析符号链接。 |
QFileDialog.DontConfirmOverwrite | 如果选择了现有文件,则不要要求确认。默认情况下,会请求确认。 |
QFileDialog.DontUseNativeDialog | 不要使用本机文件对话框。默认情况下,除非使用包含Q_OBJECT宏的QFileDialog子类,或者平台没有所需类型的本机对话框,否则将使用本机文件对话框。 |
注意:当使用本机文件对话框时,macOS不支持此选项
Constant | Description |
---|---|
QFileDialog.DontUseNativeDialog | 不要使用本机文件对话框。默认情况下,除非使用包含Q_OBJECT宏的QFileDialog子类,或者平台没有所需类型的本机对话框,否则将使用本机文件对话框。 |
必须在更改对话框属性或显示对话框之前设置此选项。
Constant | Description |
---|---|
QFileDialog.ReadOnly | 指示模型是只读的。 |
QFileDialog.HideNameFilterDetails | 指示文件名筛选器详细信息是否隐藏。 |
QFileDialog.DontUseCustomDirectoryIcons | 始终使用默认的目录图标。某些平台允许用户设置不同的图标。自定义图标查找会对网络或可移动驱动器的性能产生重大影响。设置此选项将启用图标提供程序中的QFileIconProvider::DontUseCustomDirectoryCons选项。此枚举值已添加到Qt 5.2中。 |
文件对话框QFileDialog 主要方法介绍如下:
文件对话框也用show()、open()和exec()方法显示,最简便的方法是用QFileDialog 提供的静态方法来打开文件对话框获取文件路径和文件名。
用setFileMode(QFileDialog.FileMode)方法可以设置对话框的文件模式,文件模式是指对话框显示的内容或允许选择的内容,其中参数 PySide6.QtWidgets.QFileDialog.FileMode 可以取以下值; 用fileMode()方法可以获取文件模式。此枚举用于指示用户可以在文件对话框中选择什么;即如果用户点击OK,对话框将返回什么。可取见枚举值。
用setOption(QFileDialog.Option,on=True)方法设置文件对话框的外观选项,需在显示对话框之前设置,参数 QFileDialog.Option 可以取:
用setAcceptMode(QFileDialog.AcceptMode)方法设置文件对话框是打开对话框还是保存对话框,参数 QFileDialog.AcceptMode 可取见枚举值。
用setViewMode(QFileDialog,ViewMode)方法设置对话框的视图模式参数PySide6.QtWidgets.QFileDialog.ViewMode描述文件对话框的视图模式;即将显示关于每个文件的什么信息。可取见枚举值。
用setDefaultSuffix(str)方法设置默认的扩展名,例如在保存文件时只需输入文件名,系统自动会附加默认的扩展名。
用selectFile(str)方法可以设置对话框中初始选中的文件,用setDirectory(str)setDirectory(QDir)方法设置对话框的初始路径,关于QDir 的内容见数据读写和文件管理相关章节
设置过滤器 filter。
过滤器的作用是在文件对话框中只显示某些类型的文件,例如通过方法setNameFilter(“Picture(*.png *.bmp *.jpeg *jpg”)设置过滤器之后,对话框只显示扩展名为 png、bmp、jpeg 和jpg 的文件。
创建过滤器时,过滤器间用空格隔开,如果有括号,则用括号中的内容作为过滤器,多个过滤器用两个分号";;"隔开,例如 setNameFilter(“Picture(*,png .bmp);; text(.txt)”)。
用setNameFilter(str)方法或 setNameFilters(Sequence[str])方法设置对话框中的过滤器。
用selectedFiles()方法可以获得最终选中的文件名(含路径)的列表
用selectedNameFilter()方法可以获得最终选中的过滤器对话框上的标签和按钮的文字
用setLabelText(QFileDialog.DialogLabel,str)方法重新设置,其中参数 QFileDialog.DialogLabel可以取可取见枚举值。
用QFileDialog 的静态方法快速显示文件对话框,这些静态方法的格式如下所示:、
getExistingDirectory(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None,caption: str='',dir: str='',options: PySide6.QtWidgets.QFileDialog.Option=Instance(PySide6.QtWidgets.QFileDialog.Option.ShowDirsOnly))-> str
getExistingDirectoryUrl(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None,caption: str='',dir: Union[PySide6.QtCore.QUrl,str]=Default(QUrl),options: PySide6.QtWidgets.QFileDialog.Option=Instance(PySide6.QtWidgets.QFileDialog.Option.ShowDirsOnly),supportedSchemes: Sequence[str]=[])-> PySide6.QtCore.QUrl
getOpenFileName(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: str='',filter: str='',selectedFilter: str='',options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options))-> Tuple
getOpenFileNames(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: str='',filter: str='',selectedFilter: str='',options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options))-> Tuple
getOpenFileUrl(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: Union[PySide6.QtCore.QUrl,str]='',filter: str=Default(QUrl),selectedFilter: str='',options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options),supportedSchemes: Sequence[str]=[])-> Tuple
getOpenFileUrls(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: Union[PySide6.QtCore.QUrl,str]='',filter: str=Default(QUrl),selectedFilter: str='',options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options),supportedSchemes: Sequence[str]=[])-> Tuple
getSaveFileName(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: str='',filter: str='',selectedFilter: str='',options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options))-> Tuple
getSaveFileUrl(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: Union[PySide6.QtCore.QUrl,str]='',filter: str=Default(QUrl),selectedFilter: str='',options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options),supportedSchemes: Sequence[str]=[])-> Tuple
这些静态函数的返回值除getExistingDirectory()和 getExistingDirectoryUrl()外其都是元组,元组的第 1个元素是文件名或文件名列表,第 2个元素是选中的过滤器。
更多介绍见下方静态方法介绍
文件对话框QFileDialog 的常用方法如表所示:
QFileDialog的方法及参数类型 | 返回值的类型 | 说明 |
---|---|---|
serAcceptMode(QFileDialog.AceptMode) | None | 设置是打开还是保存对话框 |
setDefaultSuffix(str) | None | 设置默认的扩展名 |
defaultSuffix() | Str | 获取默认的扩展名 |
saveState() | QByteArray | 保存对话框状态到 QByteArray 中 |
restoreState(QByteArray) | bool | 恢复对话框的状态 |
selectFile(str) | None | 设置初始选中的文件,可当作默认文件 |
selectedFiles() | List[str] | 获取被选中的文件的绝对文件路径列表,如果没有选择文件,则返回值只有路径 |
selectNameFilter(str) | None | 设置对话框初始名称过滤器 |
selectedNameFilter() | stI | 获取当前选择的名称过滤器 |
selectUrl(url: Union[QUrl,str]) | None | 设置对话框中初始选中的文件 |
selectedUrls() | ListLQUrlJ | 获取被选中的文件的绝对文件路径列表,如果没有选择文件,则返回值只有路径 |
directory() | QDir | 获取对话框的当前路径 |
directoryUrl() | QUrl | 获取对话框的当前路径 |
setDirectory(directory: Union[QDir,str]) | None | 设置对话框的初始路径 |
setFileMode(QFileDialog.FileMode) | None | 设置文件模式,对话框是用于选择路径、单 个文件还是多个文件 |
setHistory(paths:Sequence[str]) | None | 设置对话框的浏览记录 |
history() | List[str] | 获取对话框的浏览记录列表 |
setLabelText(QFileDialog.DialogLabel,str) | None | 设置对话框上各标签或按钮的名称 |
labelText(QFileDialog.DialogLabel) | str | 获取对话框上标签或按钮的名称 |
setNameFilter(str) | None | 根据文件的扩展名设置过滤器 |
setNameFilters(Sequence[str]) | None | 设置多个过滤器 |
nameFilters() | List[str] | 获取过滤器列表 |
setFilter(filters: QDir.Filters) | None | 根据文件的隐藏、已被修改、系统文件等特 性设置过滤器 |
setOption(QFileDialog.Option,on=True) | None | 设置对话框的外观选项 |
testOption(QFileDialog.Option) | bool | 测试是否设置了某种外观样式 |
setViewMode(QFileDialog.ViewMode) | None | 设置对话框中文件的视图方式,是列表显 示还是详细显示 |
getExistingDirectory(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None,caption: str=‘’,dir: str=‘’,options: PySide6.QtWidgets.QFileDialog.Option=Instance(PySide6.QtWidgets.QFileDialog.Option.ShowDirsOnly))-> str | str | 打开文件对话框,获取路径或文件及过滤器 |
getExistingDirectoryUrl(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None,caption: str=‘’,dir: Union[PySide6.QtCore.QUrl,str]=Default(QUrl),options: PySide6.QtWidgets.QFileDialog.Option=Instance(PySide6.QtWidgets.QFileDialog.Option.ShowDirsOnly),supportedSchemes: Sequence[str]=[])-> PySide6.QtCore.QUrl | QUrl | 打开文件对话框,获取路径或文件及过滤器 |
getOpenFileName(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: str=‘’,filter: str=‘’,selectedFilter: str=‘’,options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options))-> Tuple | Tuple | 打开文件对话框,获取路径或文件及过滤器 |
getOpenFileNames(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: str=‘’,filter: str=‘’,selectedFilter: str=‘’,options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options))-> Tuple | Tuple | 打开文件对话框,获取路径或文件及过滤器 |
getOpenFileUrl(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: Union[PySide6.QtCore.QUrl,str]=‘’,filter: str=Default(QUrl),selectedFilter: str=‘’,options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options),supportedSchemes: Sequence[str]=[])-> Tuple | Tuple | 打开文件对话框,获取路径或文件及过滤器 |
getOpenFileUrls(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: Union[PySide6.QtCore.QUrl,str]=‘’,filter: str=Default(QUrl),selectedFilter: str=‘’,options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options),supportedSchemes: Sequence[str]=[])-> Tuple | Tuple | 打开文件对话框,获取路径或文件及过滤器 |
getSaveFileName(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: str=‘’,filter: str=‘’,selectedFilter: str=‘’,options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options))-> Tuple | Tuple | 打开文件对话框,获取路径或文件及过滤器 |
getSaveFileUrl(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType]=None,dir: Union[PySide6.QtCore.QUrl,str]=‘’,filter: str=Default(QUrl),selectedFilter: str=‘’,options: PySide6.QtWidgets.QFileDialog.Option=Default(QFileDialog.Options),supportedSchemes: Sequence[str]=[])-> Tuple | Tuple | 打开文件对话框,获取路径或文件及过滤器 |
getExistingDirectory(parent: Union[PySide6.QtWidgets.QWidget,NoneType] = None,
caption: str ='',
dir: str ='',
options: PySide6.QtWidgets.QFileDialog.Option = Instance(PySide6.QtWidgets.QFileDialog.Option.ShowDirsOnly)
)-> str
这是一个方便的静态函数,它将返回用户选择的现有目录。
dir = QFileDialog.getExistingDirectory(self,tr("Open Directory"),()
"/home",
QFileDialog.ShowDirsOnly
| QFileDialog.DontResolveSymlinks)
此函数使用给定的父窗口小部件创建一个模式文件对话框。如果parent不是None,则对话框将显示在父窗口小部件的中央。
对话框的工作目录设置为dir,标题设置为caption。其中任何一个都可能是空字符串,在这种情况下,将分别使用当前目录和默认标题。
options参数包含有关如何运行对话框的各种选项,有关可以传递的标志的详细信息,请参阅Option枚举。若要确保本机文件对话框,必须设置ShowDirsOnly。
在Windows和macOS上,此静态函数将使用本机文件对话框,而不是QFileDialog。但是,本机Windows文件对话框不支持在目录选择器中显示文件。您需要传递DontUseNativeDialog以使用QFileDialog显示文件。
请注意,macOS本机文件对话框不会显示标题栏。
在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。例如,如果/usr/tmp是/var/tmp的符号链接,则在输入/usr/tmp后,文件对话框将更改为/var/tmp。如果选项包括DontResoverSymlinks,则文件对话框会将符号链接视为常规目录。
在Windows上,该对话框将旋转一个阻塞模式事件循环,该循环不会调度任何QTimer,如果父对象不是None,则会将对话框定位在父对象标题栏的正下方。
在执行对话框期间不要删除父项。如果您想这样做,您应该使用其中一个QFileDialog构造函数自己创建对话框。
getExistingDirectoryUrl(parent: Union[PySide6.QtWidgets.QWidget,NoneType] = None,
caption: str ='',
dir: Union[PySide6.QtCore.QUrl,str] = Default(QUrl),
options: PySide6.QtWidgets.QFileDialog.Option = Instance(PySide6.QtWidgets.QFileDialog.Option.ShowDirsOnly),
supportedSchemes: Sequence[str] = []
)-> PySide6.QtCore.QUrl
这是一个方便的静态函数,它将返回用户选择的现有目录。如果用户按Cancel,它将返回一个空的url。
该函数的使用与getExistingDirectory()类似。特别是parent,caption、dir和options的使用方式完全相同。
与getExistingDirectory()的主要区别在于提供给用户选择远程目录的功能。这就是为什么返回类型和dir的类型是QUrl。
supportedSchemes参数允许限制用户可以选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示不应用任何限制(默认情况下)。支持本地文件("文件"方案)是隐式的,并且始终处于启用状态;没有必要将其包括在限制中。
如果可能,此静态函数将使用本机文件对话框,而不是QFileDialog。在不支持选择远程文件的平台上,Qt将只允许选择本地文件。
getOpenFileUrl(parent: PySide6.QtWidgets.QWidget,
caption: Union[str,NoneType] = None,
dir: Union[PySide6.QtCore.QUrl,str] ='',
filter: str = Default(QUrl),
selectedFilter: str ='',
options: PySide6.QtWidgets.QFileDialog.Option = Default(QFileDialog.Options),
supportedSchemes: Sequence[str] = []
)-> Tuple(fileName,selectedFilter)
这是一个方便的静态函数,用于返回用户选择的现有文件。如果用户按Cancel,它将返回一个空的url。
该函数的使用方法与getOpenFileName()类似。特别是parent,caption、dir、filter、selectedFilter和options的使用方式完全相同。
getOpenFileName()的主要区别在于提供给用户选择远程文件的能力。这就是为什么返回类型和dir的类型是QUrl。
supportedSchemes参数允许限制用户可以选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示不应用任何限制(默认情况下)。支持本地文件("文件"方案)是隐式的,并且始终处于启用状态;没有必要将其包括在限制中。
如果可能,此静态函数将使用本机文件对话框,而不是QFileDialog。在不支持选择远程文件的平台上,Qt将只允许选择本地文件。
getOpenFileUrls(parent: PySide6.QtWidgets.QWidget,
caption: Union[str,NoneType] = None,
dir: Union[PySide6.QtCore.QUrl,str] ='',
filter: str = Default(QUrl),
selectedFilter: str ='',
options: PySide6.QtWidgets.QFileDialog.Option = Default(QFileDialog.Options),
supportedSchemes: Sequence[str] = []
)-> Tuple((fileName,selectedFilter),...)
这是一个方便的静态函数,它将返回用户选择的一个或多个现有文件。如果用户按Cancel,则返回一个空列表。
该函数的使用与getOpenFileNames()类似。特别是parent,caption、dir、filter、selectedFilter和options的使用方式完全相同。
与getOpenFileNames()的主要区别在于提供给用户选择远程文件的能力。这就是为什么返回类型和dir的类型分别是QList<QUrl>和QUrl。
supportedSchemes参数允许限制用户可以选择的URL类型。这是应用程序声明其将支持的协议以获取文件内容的一种方式。空列表表示不应用任何限制(默认情况下)。支持本地文件("文件"方案)是隐式的,并且始终处于启用状态;没有必要将其包括在限制中。
如果可能,此静态函数将使用本机文件对话框,而不是QFileDialog。在不支持选择远程文件的平台上,Qt将只允许选择本地文件。
getSaveFileUrl(parent: PySide6.QtWidgets.QWidget,
caption: Union[str,NoneType] = None,
dir: Union[PySide6.QtCore.QUrl,str] ='',
filter: str = Default(QUrl),
selectedFilter: str ='',
options: PySide6.QtWidgets.QFileDialog.Option = Default(QFileDialog.Options),
supportedSchemes: Sequence[str] = []
)-> Tuple(fileName,selectedFilter)
这是一个方便的静态函数,用于返回用户选择的文件。该文件不必存在。如果用户按Cancel,它将返回一个空的url。
该函数的用法与getSaveFileName()类似。特别是parent,caption、dir、filter、selectedFilter和options的使用方式完全相同。
与getSaveFileName()的主要区别在于提供给用户选择远程文件的能力。这就是为什么返回类型和dir的类型是QUrl。
supportedSchemes参数允许限制用户可以选择的URL类型。这是应用程序声明其将支持的协议以保存文件内容的一种方式。空列表表示不应用任何限制(默认情况下)。支持本地文件("文件"方案)是隐式的,并且始终处于启用状态;没有必要将其包括在限制中。
如果可能,此静态函数将使用本机文件对话框,而不是QFileDialog。在不支持选择远程文件的平台上,Qt将只允许选择本地文件。
getSaveFileName(parent: PySide6.QtWidgets.QWidget,
caption: Union[str,NoneType] = None,
dir: str ='',
filter: str ='',
selectedFilter: str ='',
options: PySide6.QtWidgets.QFileDialog.Option = Default(QFileDialog.Options)
)-> Tuple(fileName,selectedFilter)
这是一个方便的静态函数,它将返回用户选择的文件名。该文件不必存在。
它使用给定的父窗口小部件创建一个模式文件对话框。如果parent不是None,则对话框将显示在父窗口小部件的中央。
fileName = QFileDialog.getSaveFileName(self,tr("Save File"),()
"/home/jana/untitled.png",
tr("Images(*.png *.xpm *.jpg)"))
文件对话框的工作目录将设置为dir。如果dir包含文件名,则会选择该文件。只显示与筛选器匹配的文件。选定的筛选器设置为selectedFilter。参数dir、selectedFilter和filter可以是空字符串。多个筛选器用";;"分隔。例如:
"Images(*.png *.xpm *.jpg);;Text files(*.txt);;XML files(*.xml)"
文件对话框的工作目录将设置为dir。如果dir包含文件名,则会选择该文件。只显示与筛选器匹配的文件。选定的筛选器设置为selectedFilter。参数dir、selectedFilter和filter可以是空字符串。多个筛选器用";;"分隔。例如:
"Images(*.png *.xpm *.jpg);;Text files(*.txt);;XML files(*.xml)"
options参数包含有关如何运行对话框的各种选项,有关可以传递的标志的详细信息,请参阅Option枚举。
可以通过将selectedFilter设置为所需值来选择默认筛选器。
对话框的标题设置为标题。如果未指定标题,则将使用默认标题。
在Windows和macOS上,此静态函数将使用本机文件对话框,而不是QFileDialog。
在Windows上,对话框将旋转一个阻塞模式事件循环,该循环不会调度任何QTimer,如果父对象不是None,则将对话框定位在父对象标题栏的正下方。在带有本机文件对话框的macOS上,filter参数被忽略。
在Unix/X11上,文件对话框的正常行为是解析并遵循符号链接。例如,如果/usr/tmp是/var/tmp的符号链接,则在输入/usr/tmp后,文件对话框将更改为/var/tmp。如果选项包括DontResoverSymlinks,则文件对话框将符号链接视为常规目录。
在执行对话框期间不要删除父项。如果您想这样做,您应该使用其中一个QFileDialog构造函数自己创建对话框。
saveFileContent(fileContent: Union[PySide6.QtCore.QByteArray,bytes],
fileNameHint: str =''
)-> None
这是一个方便的静态函数,使用用户选择的文件名和位置将fileContent保存到文件中。可以提供fileNameHint来向用户建议文件名。
此功能用于将文件保存到Qt for WebAssembly上的本地文件系统,在该系统中,web沙箱会限制如何进行此类访问。它的实现将使浏览器显示一个本地文件对话框,用户可以在其中进行文件选择。
它也可以在其他平台上使用,在这些平台上它将重新使用QFileDialog。
该函数是异步的,并立即返回。
imageData = QByteArray()
QFileDialog.saveFileContent(imageData,"myimage.png")# with filename hint
# OR
QFileDialog.saveFileContent(imageData)# no filename hint
getOpenFileName(parent: PySide6.QtWidgets.QWidget,
caption: Union[str,NoneType] = None,
dir: str ='',
filter: str ='',
selectedFilter: str ='',
options: PySide6.QtWidgets.QFileDialog.Option = Default(QFileDialog.Options)
)-> Tuple(fileName,selectedFilter)
这是一个方便的静态函数,用于返回用户选择的现有文件。如果用户按Cancel,则返回一个空字符串。
getOpenFileNames(parent: PySide6.QtWidgets.QWidget,caption: Union[str,NoneType] = None,
dir: str ='',
filter: str ='',
selectedFilter: str ='',
options: PySide6.QtWidgets.QFileDialog.Option = Default(QFileDialog.Options)
)-> Tuple((fileNames,selectedFilter),...)
这是一个方便的静态函数,它将返回用户选择的一个或多个现有文件。
文件对话框 QFileDialog 的信号如表所示。
QFileDialog的信号及参数类型 | 说 明 |
---|---|
currentChanged(file: str) | 在对话框中所选择的文件或路径发生改变时发送信号,参数是当前 选择的文件或路径 |
currentUrlChanged(QUrl) | 在对话框中所选择的文件或路径发生改变时发送信号,传递的参数是 QUrl |
directoryEntered(directory: str) | 进入新路径时发送信号,参数是新路径 |
directoryUrlEntered(QUrl) | 进入新路径时发送信号,传递的参数是QUrl |
fileSelected(file: str) | 单击open或save按钮后发送信号,参数是选中的文件 |
urlSelected(QUrI) | 单击open或save按钮后发送信号,传递的参数是 QUrl |
filesSelected(files:List[str]) | 单击open或save按钮后发送信号,参数是选中的文件列表 |
urlsSelected(List[QUrl]) | 单击open或save按钮后发送信号,传递的参数是List[QUr1] |
filterSelected(str) | 选择新的过滤器后发送信号,参数是新过滤器 |
# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/14 23:19
# File_name: 10-QFileDialog 例子.py
import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
import os
class filedialogdemo(QWidget):
def __init__(self,parent=None):
super(filedialogdemo,self).__init__(parent)
layout = QVBoxLayout()
self.label = QLabel("此处显示文件信息")
layout.addWidget(self.label)
self.label2 = QLabel()
layout.addWidget(self.label2)
self.button_pic_filter1 = QPushButton("加载图片-过滤1(静态方法)")
self.button_pic_filter1.clicked.connect(self.file_pic_filter1)
layout.addWidget(self.button_pic_filter1)
self.button_pic_filter2 = QPushButton("加载图片-过滤2(实例化方法)")
self.button_pic_filter2.clicked.connect(self.file_pic_filter2)
layout.addWidget(self.button_pic_filter2)
self.button_pic_filter3 = QPushButton("加载图片-过滤3(实例化方法)")
self.button_pic_filter3.clicked.connect(self.file_pic_filter3)
layout.addWidget(self.button_pic_filter3)
self.button_MultiFile1 = QPushButton("选择多个文件-过滤1(静态方法)")
self.button_MultiFile1.clicked.connect(self.file_MultiFile1)
layout.addWidget(self.button_MultiFile1)
self.button_MultiFile2 = QPushButton("选择多个文件-过滤2(实例化方法)")
self.button_MultiFile2.clicked.connect(self.file_MultiFile2)
layout.addWidget(self.button_MultiFile2)
self.button_file_mode = QPushButton("file_mode示例:选择文件夹")
self.button_file_mode.clicked.connect(self.file_mode_show)
layout.addWidget(self.button_file_mode)
self.button_directory = QPushButton("选择文件夹(静态方法)")
self.button_directory.clicked.connect(self.directory_show)
layout.addWidget(self.button_directory)
self.button_save = QPushButton("存储文件")
self.button_save.clicked.connect(self.file_save)
layout.addWidget(self.button_save)
self.setLayout(layout)
self.setWindowTitle("File Dialog 例子")
def file_pic_filter1(self):
fname,_ = QFileDialog.getOpenFileName(self,caption='Open file1',dir=os.path.abspath('.')+'\\images',
filter="Image files(*.jpg *.png);;Image files2(*.ico *.gif);;All files(*)")
self.label.setPixmap(QPixmap(fname))
self.label2.setText('你选择了:\n'+ fname)
def file_pic_filter2(self):
file_dialog = QFileDialog(self,caption='Open file2',directory=os.path.abspath('.')+'\\images',
filter="Image files(*.jpg *.png);;Image files2(*.ico *.gif);;All files(*)")
if file_dialog.exec():
file_path_list = file_dialog.selectedFiles()
self.label.setPixmap(QPixmap(file_path_list[0]))
self.label2.setText('你选择了:\n'+ file_path_list[0])
def file_pic_filter3(self):
file_dialog = QFileDialog()
file_dialog.setWindowTitle('Open file3')
file_dialog.setDirectory(os.path.abspath('.')+'\\images')
file_dialog.setNameFilter("Image files(*.jpg *.png);;Image files2(*.ico *.gif);;All files(*)")
if file_dialog.exec():
file_path_list = file_dialog.selectedFiles()
self.label.setPixmap(QPixmap(file_path_list[0]))
self.label2.setText('你选择了:\n'+ file_path_list[0])
def file_MultiFile1(self):
file_path_list,_ = QFileDialog.getOpenFileNames(self,caption='选择多个文件',dir=os.path.abspath('.'),
filter="All files(*);;Python files(*.py);;Image files(*.jpg *.png);;Image files2(*.ico *.gif)")
self.label.setText('你选择了如下路径:\n'+';\n'.join(file_path_list))
self.label2.setText('')
def file_MultiFile2(self):
file_dialog = QFileDialog(self,caption='选择多个文件',directory=os.path.abspath('.'),
filter="All files(*);;Python files(*.py);;Image files(*.jpg *.png);;Image files2(*.ico *.gif)")
file_dialog.setFileMode(file_dialog.ExistingFiles)
if file_dialog.exec():
file_path_list = file_dialog.selectedFiles()
self.label.setText('你选择了如下路径:\n'+';\n'.join(file_path_list))
self.label2.setText('')
def file_mode_show(self):
file_dialog = QFileDialog(self,caption='file_mode示例:选择文件夹',directory=os.path.abspath('.'))
file_dialog.setFileMode(file_dialog.Directory)
if file_dialog.exec():
file_path_list = file_dialog.selectedFiles()
self.label.setText('你选择了如下路径:\n'+';\n'.join(file_path_list))
self.label2.setText('')
def directory_show(self):
directory_path = QFileDialog.getExistingDirectory(caption='获取存储路径',dir=os.path.abspath('.'))
self.label.setText('获取目录:\n'+ directory_path)
self.label2.setText('')
def file_save(self):
file_save_path,_ = QFileDialog.getSaveFileName(self,caption='获取存储路径',dir=os.path.abspath('.'),
filter="All files(*);;Python files(*.py);;Image files(*.jpg *.png);;Image files2(*.ico *.gif)")
self.label.setText('存储路径如下:\n'+ file_save_path)
self.label2.setText('')
if __name__ =='__main__':
app = QApplication(sys.argv)
ex = filedialogdemo()
ex.show()
sys.exit(app.exec())