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

Python3按钮打开文件时报错TypeError:期望路径对象而非函数

错误原因与修复方案

核心错误点

  1. 未调用函数,仅引用函数对象
    在load_key方法中,filename = self.browse_files只是将函数本身赋值给变量,而非调用函数获取返回的文件名,导致open函数接收到的是函数对象而非路径字符串,触发类型错误。

  2. 类方法缺少必要参数
    browse_files作为Something类的实例方法,未声明self参数,无法通过实例正常调用。

  3. 按钮事件绑定错误
    command=Something.load_key(Something)会在初始化按钮时立即执行load_key方法,而非在点击按钮时触发,同时错误地将类本身作为self传入方法。

  4. 缺失依赖模块导入
    代码使用了customtkinter和tkinter.filedialog,但未添加对应的导入语句。

修正后的完整代码

import customtkinter
from tkinter import filedialog

class Something:
    def load_key(self):
        # 调用browse_files获取文件名
        filename = self.browse_files()
        if filename:  # 避免用户取消选择时传入空路径
            with open(filename, "rb") as f:
                self.key = f.read()
            print("密钥加载完成")

    # 添加self参数,转为合法实例方法
    def browse_files(self):
        filename = filedialog.askopenfilename(
            initialdir="/",
            title="Select a File",
            filetypes=(("Text files", "*.txt*"), ("all files", "*.*"))
        )
        return filename


class App(customtkinter.CTk):
    WIDTH = 780
    HEIGHT = 520

    def __init__(self):
        super().__init__()
        
        customtkinter.set_appearance_mode("dark")
        customtkinter.set_default_color_theme("dark-blue")
        
        # 创建Something类实例
        self.something_instance = Something()
        # 绑定实例方法到按钮(不带括号,点击时才执行)
        self.button2 = customtkinter.CTkButton(
            master=self, 
            text="Load a key", 
            command=self.something_instance.load_key, 
            width=450, 
            height=60
        )
        self.button2.pack(pady=10, padx=50)


if __name__ == "__main__":
    app = App()
    app.mainloop()

关键修正说明

  • 补充了customtkinter和filedialog的导入语句,确保依赖可用。
  • 为browse_files添加self参数,使其成为可被实例调用的方法。
  • 在load_key中调用self.browse_files()获取文件名,并增加非空判断,避免用户取消选择时触发报错。
  • 创建Something类的实例,将按钮的command绑定到实例的load_key方法(不带括号),保证点击按钮时才执行方法。

内容的提问来源于stack exchange,提问作者Khacke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:45:48