Python文件选择功能问题:非PDF文件无法触发弹窗提示
解决Python文件选择器的PDF检测问题与TypeError错误
我来帮你一步步搞定这两个问题——TypeError报错和非PDF文件不触发弹窗的逻辑问题:
1. 先解决TypeError: guess_type() got an unexpected keyword argument 'file'
mimetypes.guess_type()的第一个参数就是文件路径字符串,它根本没有名为file的关键字参数;而且你写的'file1'是字符串字面量,不是你获取到的文件变量。另外,filedialog.askopenfile()返回的是文件对象,不是文件路径,这也会导致无法正确识别文件类型。你需要改用filedialog.askopenfilename()来获取完整的文件路径。
2. 修正PDF文件类型的判断逻辑
mimetypes.guess_type()返回的是一个元组,格式为(mimetype, encoding),比如PDF文件会返回('application/pdf', None),所以你直接判断x == ('application/pdf')是永远不成立的(左边是元组,右边是字符串),得取元组的第一个元素来做判断。
完整修正后的代码
import tkinter as tk from tkinter import filedialog, messagebox import mimetypes def OpenFile(): # 改用askopenfilename获取文件路径,而非文件对象 file_path = filedialog.askopenfilename(initialdir="/") if not file_path: # 处理用户取消选择文件的情况 return print(file_path) # 直接传入文件路径调用guess_type,不需要多余的关键字参数 file_type_tuple = mimetypes.guess_type(file_path) # 提取元组第一个元素作为文件的MIME类型 file_type = file_type_tuple[0] if file_type == 'application/pdf': messagebox.showinfo("Disclaimer", "Upload done", icon='info') else : messagebox.showinfo("Disclaimer", "Choose a PDF file", icon='warning') # 测试运行代码 root = tk.Tk() root.withdraw() # 隐藏主窗口 OpenFile()
关键改动点说明
- 替换
askopenfile为askopenfilename:获取文件的完整路径,而非打开的文件对象 - 移除
guess_type的file关键字参数:直接传入文件路径字符串即可 - 处理
guess_type的返回值:取元组第一个元素来判断MIME类型 - 增加用户取消选择的判断:避免用户点击取消后程序出现异常
内容的提问来源于stack exchange,提问作者Albert_programmer
相关产品推荐
相关产品推荐

