无法在 QFileDialog 中为文件添加扩展名

Can't add extension to file in QFileDialog

我在使用 QFileDialog 在 PyQt4 中保存带扩展名的文件(获取文件路径并追加扩展名)时遇到问题。我的 Python 代码如下所示:

dialog = QtGui.QFileDialog()
dialog.setDefaultSuffix(".json")
file = dialog.getSaveFileName(None, "Title", "", "JSON (.json)")

有效,路径正确,对话框标题和过滤器在对话框 window 中,但第二行被忽略。文件没有任何扩展名。

如何默认添加扩展?我做错了什么?

尝试使用 *.json 而不是 .json

file = dialog.getSaveFileName(None, "Title", "", "JSON (*.json)");

QFileDialog 的实例上调用 setDefaultSuffix 在您使用 static functions 时无效。这些函数将创建自己的内部文件对话框,因此可以在其上设置的唯一选项是通过参数提供的任何选项。

当然,setDefaultSuffix如果直接显示QFileDialog的实例就可以了:

dialog = QtGui.QFileDialog()
dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden)
dialog.setDefaultSuffix('json')
dialog.setAcceptMode(QtGui.QFileDialog.AcceptSave)
dialog.setNameFilters(['JSON (*.json)'])
if dialog.exec_() == QtGui.QDialog.Accepted:
    print(dialog.selectedFiles())
else:
    print('Cancelled')

但请注意,您无法使用此方法获得本机文件对话框。

如果正确指定了文件名过滤器(见上文,以及 ), 本机文件对话框可能提供了一种自动选择文件扩展名的方法(Linux 上的 KDE 肯定是这种情况,但我不知道其他平台)。