如何让asksaveasfilename仅保存PNG/JPG图片且可在文件目录正常访问?
修复方案
核心问题原因
- 未执行实际的磁盘写入操作:代码将保存对话框返回的路径直接覆盖了截图对象,没有调用保存接口写入文件,导致目录下没有生成实际文件
- 文件类型配置错误:当前设置允许所有格式文件,没有限制为png、jpg格式
修复步骤
- 调整文件类型过滤规则,仅开放png、jpg两种可选格式,同时配置默认扩展名自动补全逻辑,即使用户未输入后缀也会自动追加对应格式后缀
- 拿到用户选择的保存路径后,调用PIL Image对象的
save方法将截图写入磁盘 - 增加空路径判断逻辑,避免用户点击取消按钮后触发空路径异常
修复后可运行代码
import tkinter as tk from tkinter.filedialog import asksaveasfilename import pyautogui as pyg table = tk.Tk() def screenshot(): x = table.winfo_rootx() y = table.winfo_rooty() w = table.winfo_width() h = table.winfo_height() # 仅保留png和jpg两种可选格式 allow_file_types = [ ("PNG 图像", "*.png"), ("JPG 图像", "*.jpg") ] # 截取窗口区域内容 screenshot_img = pyg.screenshot(region=(x,y,w,h)) # 唤起保存对话框,配置自动补全扩展名 save_path = asksaveasfilename( filetypes=allow_file_types, defaultextension=allow_file_types ) # 用户确认保存后写入磁盘 if save_path: screenshot_img.save(save_path) # 绘制3*3输入网格 for i in range(0,3): for j in range(0,3): cell = tk.Entry(table,width=10,font=('Verdana',10)) cell.grid(row=i,column=j) snap_btn = tk.Button(table,text="截图保存",command=screenshot) snap_btn.grid(row=i+1,column=j) table.mainloop()
如果运行时提示缺少PIL相关依赖,执行pip install pillow安装即可正常使用。
内容的提问来源于stack exchange,提问作者Jamie Truong
相关产品推荐
相关产品推荐

