打开文件对话框
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
对话框,提示框,弹窗提醒
##pip install pywin32
import win32api,win32con
##提醒OK消息框
win32api.MessageBox(0, "这是一个测试提醒OK消息框", "提醒",win32con.MB_OK)
##是否信息框
win32api.MessageBox(0, "这是一个测试是否信息框", "提醒",win32con.MB_YESNO)
##说明信息框
win32api.MessageBox(0, "这是一个测试说明信息框", "提醒",win32con.MB_HELP)
####警告信息框
win32api.MessageBox(0, "这是一个测试警告信息框", "提醒",win32con.MB_ICONWARNING)
##疑问信息框
win32api.MessageBox(0, "这是一个测试疑问信息框", "提醒",win32con.MB_ICONQUESTION)
##提示信息框
win32api.MessageBox(0, "这是一个测试提示信息框", "提醒",win32con.MB_ICONASTERISK)
##确认信息框
win32api.MessageBox(0, "这是一个测试确认信息框", "提醒",win32con.MB_OKCANCEL)
##重试信息框
win32api.MessageBox(0, "这是一个测试重试信息框", "提醒",win32con.MB_RETRYCANCEL)
##是否取消信息框
win32api.MessageBox(0, "这是一个测试是否取消信息框", "提醒",win32con.MB_YESNOCANCEL)
win32库弹窗倒计时自动关闭
import ctypes
import threading
import time
import win32con
user32 = ctypes.windll.user32
def create_dialog(message: str, title: str, style: int = win32con.MB_OK,
block: bool = None, interval: float = 0, callback=None):
"""
使用微软未公布的Windows API: MessageBoxTimeout 实现自动关闭的对话框,通过user32.dll调用,
相比于使用 MessageBox 来实现显得更加简洁,参数详情请参考以上函数 create_dialog
值得注意的是 Windows 2000 没有导出该函数。并且对于多选一没有关闭/取消功能的对话框,
自动关闭时默认(回调)返回值为 32000
"""
block = block if (block is not None) else interval <= 0
interval = int(interval * 1000) if interval > 0 else 0
def show():
# if UNICODE MessageBoxTimeoutW
# else MessageBoxTimeoutA
# MessageBoxTimeout(hwnd, lpText, lpCaption, uType, wLanguageId, dwMilliseconds)
btn_val = user32.MessageBoxTimeoutW(
0, message, title, style, 0, interval)
if callback and callable(callback):
callback(btn_val)
return btn_val
if block:
return show()
else:
threading.Thread(target=show).start()
# 基本使用
if __name__ == '__main__':
def cb(res):
print("[回调函数] 对话框返回值:{}".format(res))
# 同步阻塞+手动关闭
res = create_dialog('同步阻塞+手动关闭', '同步阻塞对话框')
print(res)
# 同步阻塞+自动关闭
res = create_dialog('同步阻塞+自动关闭', '同步阻塞对话框', block=True, interval=3)
print(res)
# 当然你也可以指定对话框回调函数(多此一举?)
res = create_dialog(
'同步阻塞对话框+回调',
'同步阻塞对话框',
style=win32con.MB_YESNO,
callback=cb)
print(res)
# 异步非阻塞+手动关闭
res = create_dialog('异步非阻塞+手动关闭', '异步非阻塞自动关闭对话框')
print(res)
# 异步非阻塞+自动关闭
res = create_dialog('异步非阻塞+自动关闭', '异步非阻塞自动关闭对话框', interval=3)
print(res)
time.sleep(5)
# 添加回调函数以获取结果
res = create_dialog(
'异步非阻塞自动关闭对话框+回调',
'异步非阻塞自动关闭对话框',
interval=3,
callback=lambda x: cb(x))
print(res)
# 组合style,带警告图标的确认对话框,并且对话框弹出处于前台
res = create_dialog(
'message',
'title',
interval=2,
callback=cb,
style=win32con.MB_OK | win32con.MB_ICONERROR | win32con.MB_SETFOREGROUND)
print(res)
win32打开选择文件对话框
import os
import win32ui
lpszFilter = "csv Files (*.csv,*.txt,*.xlsx,*.xls)|*.csv;*.txt;*.xlsx;*.xls|" \
"Files (*.*)|*.*|| "
# 当前文件夹路径
dirpath = os.path.dirname(__file__)
# 这里的构造方法,对应上面展示的构造方法
dlg = win32ui.CreateFileDialog(True, "xlsx", None, 0x04 | 0x02, lpszFilter) # True表示打开文件对话框
# 设置打开文件对话框中的初始显示目录
dlg.SetOFNInitialDir(dirpath)
dlg.DoModal()
# 等待获取用户选择的文件
filename = dlg.GetPathName() # 获取选择的文件名称
# 如果用户点击了取消,则返回的filename为"",而不是None
if filename == "":
pass
else:
print(filename)