如何通过QFileDialog知道保存文件的类型

3 投票
3 回答
7844 浏览
提问于 2025-04-16 19:12

关于pyQt4

我更喜欢使用QFileDialog中的静态方法getSaveFilename,这样用户就能看到Windows或Mac系统原生的对话框。

我遇到的问题是,如果用户在保存文件名时没有输入文件扩展名(比如在选择保存为图片类型时),我就无法判断他们想保存成什么类型的文件。

我该如何创建一个可以保存文件的对话框,并且知道用户选择了哪个文件类型的过滤器呢?

举个例子:

files_types = "GML (*.gml);;Pickle (*.pickle);;YAML (*.yml)"
file = QtGui.QFileDialog.getSaveFileName(self, 'Save file', '', files_types)

通过变量file,我只能得到文件的路径,但我不确定用户选择了什么格式。

所以,我想知道我该如何获取用户选择的扩展名或文件类型。有没有办法通过这种方法获取所选的过滤器呢?

非常感谢!

3 个回答

0

这是不可能的。

唯一的办法是创建一个通用的对话框,但这样一来,你就会失去那些漂亮的原生窗口效果。

1

在PyQt5中,只需要使用:

files_types = "GML (*.gml);;Pickle (*.pickle);;YAML (*.yml)"
options = QFileDialog.Options()
filename, _ = QFileDialog.getSaveFileName(
            self, 'Save as... File', 'untitled.gml', filter=file_types,options=options)
6

你可以使用 getSaveFileNameAndFilter() 这个方法:

filename, filter = QtGui.QFileDialog.getSaveFileNameAndFilter(self, 'Save file', '', files_types)

(不过在 PySide 中,getSaveFileNameAndFilter() 这个方法是不存在的,而 getSaveFileName() 已经具备了类似的功能。我不太确定在 Python 3 默认的 PyQT api 版本 2 中是否也是这样。)

撰写回答