You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:57:40