11-窗口、窗口控件、对话框以及相关功能类-文件对话框QFileDialog

文件对话框QFileDialog

文件对话框 QFileDialog 用于打开或保存文件时获取文件路径和文件名。

在文件对话框中可以根据文件类型对文件进行过滤,只显示具有某些扩展名的文件。

文件对话框的界面分为两种,一种是 PySide6 提供的界面另一种是本机操作系统提供的界面,可以通过文件对话框的 setOption(QFileDialog.DontUseNativeDialog,bool)方法设置显示的是哪种界面。

对话框上的标签和按钮名称都可以通过对话框的属性进行修改。

用QFileDialog类创建文件对话框实例的方法如下所示其中

  • caption 用于设置对话框的标题
  • directory设置默认路径
  • filter 设置只显示具有某种扩展名的文件,filter 的取值则见下面的内容
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选项,以确保使用基于小部件的实现,而不是本机对话框。

文件对话框QFileDialog 的属性
属性 描述 访问功能
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 的常用方法

文件对话框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
    
    • caption 是对话框的标题,
    • dir 是初始路径,
    • ilter 是对话框中可选的过滤器
    • selectedFilter 是对话框中已经选中的过滤器,

    这些静态函数的返回值除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
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
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
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
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
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
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
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
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
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)信号,其中参数 file是包含文件名的完整路径
  • 在对话框中单击 open 按钮或 save 按钮后会发送fileSelected(file;str)或者 filesSelected(files: List[str])信号
  • 在对话框中更改路径时会发送 directoryEntered(directory:str)信号。
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) 选择新的过滤器后发送信号,参数是新过滤器
QFileDialog 例子
# -*- 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())

你可能感兴趣的:(#,pyside6,Python,GUI,python,开发语言,qt)