如何使用QFileDialog知道要保存的文件类型

3

关于pyQt4

我更喜欢使用 QFileDialog 中的 getSaveFilename 静态方法,以便用户能看到Windows / Mac本地对话框。

我的问题是,如果用户在保存文件名中没有输入文件扩展名(例如选择要将文件保存为图像类型时),那么我就无法检查他们想要保存为哪种类型的文件。

我该如何创建带有过滤器的对话框来保存文件,并知道用户选择了哪个过滤器?

例如:

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

使用 var file 只能获得文件路径,但我不确定用户选择的是哪种格式。

因此,我想知道如何获取扩展名或用户选择的文件类型。 是否有办法使用此方法获取 selectedFilter?

非常感谢!


我无法重现这个问题。即使我在保存文件名中省略扩展名,QFileDialog也会将所选文件类型的扩展名附加到返回的文件名中。您能否发布更多代码?有各种选项会影响返回的文件。我想知道是否有其中一个选项设置不正确。 - Stephen Terry
3个回答

6
您可以使用getSaveFileNameAndFilter()方法:
filename, filter = QtGui.QFileDialog.getSaveFileNameAndFilter(self, 'Save file', '', files_types)

然而在 PySide 中,getSaveFileNameAndFilter() 并不存在,而 getSaveFileName() 已经具有该功能。我不确定对于 Python 3 默认的 PyQT api 版本2 是否也是这种情况。


2
如果有人使用PyQt5,则getSaveFileNameAndFilter()方法被重命名为getSaveFileName()。例如:file_name, filter = QFileDialog.getSaveFileName(self, 'Save text report', 'myreport.txt', "text (*.txt);;html (*.html)") 请参见文档 - peremeykin

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)

0

这是不可能的。

唯一的方法是创建一个通用对话框,但另一方面,您将失去漂亮的本地窗口。


6
不正确,有可能,看我的回答。 - Steven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接