PS:原作者使用PYQT实现的,代码很简单,照猫画虎,明白这个意思,用C++也就知道怎么做了

我们知道在Windows中,文件保存是可通过下拉菜单选择保存的格式。如Excel文件点击“另存为”后格式选择如下:

QT保存文件时选在保存不同的文件类型_文件保存


在python编程中,GUI的设计中如何利用Pyqt类似实现这种选择保存格式的功能呢?

      首先简单看一下Pyqt.QtGui.QFileDialog类,该类为用户提供了可以选择文件和目录的dialog。用户可以利用该类提供的一些函数实现打开,保存,过滤(通过指定文件格式,后缀)等功能,同时利用该类提供的默认GUI可以更简单,更规范化的实现打开保存等dialog功能。其包含的函数很多,如directory(), filter(), selectFile(), setFilter(), open(), setOption()等等,其具体功能可以看相关tutorial, 部分功能可参考​​http://doc.qt.io/qt-4.8/qfiledialog.html​​。这里主要介绍一下它的静态函数(static function).

      QFileDialog包含的静态函数如下:getExistingDirectory(), getOpenFileName(),  getOpenFileNames(), getSaveFileName(),getSaveFileNameAndFilter() 等,这些静态函数极方便的为用户创建特定的模型化dialog. 如getExistingDirectory()返回用户指定的已存在目录,getSaveFileName()在文件保存时,返回保存对应dialog,可以让用户输入保存文件名,手动选择目录。getSaveFileNameAndFilter() 增加对文件格式筛选,文件保存格式的挑选等,具体如何实现,见下实例。

      实例:FreeROI软件对文件另存为时,缺少格式选择性过程,点击格式选择按钮,只有Nifti files一种选项(即只有默认的.nii.gz格式),如何在默认dialog添加格式选择功能?

添加前“另存为”相关代码如下:

from PyQt4.QtGui import *

QT保存文件时选在保存不同的文件类型_文件保存_02


标剪头处为强制添加的.nii.gz格式语句,和QFileDialog.getSaveFileName()调用默认另存为dialog语句。具体函数内各个参数的定义,可以网上很好的搜到或直接看相关tutorial,其dialog显示如下:

QT保存文件时选在保存不同的文件类型_文件保存_03

为了实现对格式的选择,我们对QFileDialog.getSaveFileName()进行了修改,利用getSaveFileNameAndFilter() 在不改变默认dialog的情况下实现格式选择,代码如下:

QT保存文件时选在保存不同的文件类型_文件保存_04


实现后的效果如下,通过对“另存为”的测试,实现了对.nii和.nii.gz格式保存中的选择性过程:

QT保存文件时选在保存不同的文件类型_静态函数_05


总结:QFileDialog提供了便捷的对文件操作性dialog. 其中getSaveFileNameAndFilter()在保存过程中能够简单的实现对文件格式的选择性过程。