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
// 这个是创建该类时候可以使用的参数
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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐