1 简介
- python中使用打开文件对话框或者保存文件对话框。这里以打开文件对话框举例子
- 安装
# 安装
pip install pypiwin32
2 简单示例
import win32ui
dlg= win32ui.CreateFileDialog(True)# True表示打开文件对话框
# 设置打开文件对话框中的初始显示目录
dlg.SetOFNInitialDir('E:/Python')
dlg.DoModal()
# 等待获取用户选择的文件
filename = dlg.GetPathName()# 获取选择的文件名称
# 如果没选择文件则filename是空的,即=""
print(filename)
3 文件过滤
win32ui 模块是简单的封装了Windows中ui类。
- win32ui.CreateFileDialog(True) 构造的是PyCFileDialog 类,该类对应的是Windows自带的CFileDialog
- 官方文档(C版本的),看C版本的官方文档你才会知道具体的用法
// 这个是创建该类时候可以使用的参数
CFileDialog::CFileDialog(
// TRUE为打开文件对话框;FALSE为保存文件对话框
BOOL bOpenFileDialog,
// 扩展名
LPCTSTR lpszDefExt = NULL,
// 缺省文件名
LPCTSTR lpszFileName = NULL,
// 对话框风格
// 一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示。
// OFN_HIDEREADONLY=0x04,OFN_OVERWRITEPROMPT=0x02
DWORD dwFlags = OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,
// 文件扩展名过滤
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL
)
- dwFlags 这个参数,我没有在win32ui库里看见写好的常量,如果大家有其他要求,可以参考官方文档,来查询每一个功能对应的具体的值。如果要支持多个功能,直接进行或运算即可。
- 下面重点讲解以下文件过滤
- lpszFilter参数可以给一个字符串,这种字符串的格式有要求的,类似于下列格式
# 过滤字符串以 || 结尾,每两个 | 组成一个选项
# 语法:选项说明|具体的过滤对象|
lpszFilter = "csv Files (*.csv)|*.csv|" \ # 过滤方式1:只要csv文件
"txt Files (*.csv,*.txt)|*.csv;*.txt|" \ # 过滤方式2:只要csv和txt文件
"Files (*.*)|*.*|| " # 过滤方式3:要全部文件
- 下面举一个具体的示例
import os
import win32ui
lpszFilter = "csv Files (*.csv,*.txt)|*.csv;*.txt|" \
"Files (*.*)|*.*|| "
# 当前文件夹路径
dirpath = os.path.dirname(__file__)
# 这里的构造方法,对应上面展示的构造方法
dlg = win32ui.CreateFileDialog(True, "csv", None, 0x04 | 0x02, lpszFilter) # True表示打开文件对话框
# 设置打开文件对话框中的初始显示目录
dlg.SetOFNInitialDir(dirpath)
dlg.DoModal()
# 等待获取用户选择的文件
filename = dlg.GetPathName() # 获取选择的文件名称
# 如果用户点击了取消,则返回的filename为"",而不是None
if filename == "":
pass