Python3按钮打开文件时报错TypeError:期望路径对象而非函数
错误原因与修复方案
核心错误点
未调用函数,仅引用函数对象
在load_key方法中,filename = self.browse_files只是将函数本身赋值给变量,而非调用函数获取返回的文件名,导致open函数接收到的是函数对象而非路径字符串,触发类型错误。类方法缺少必要参数
browse_files作为Something类的实例方法,未声明self参数,无法通过实例正常调用。按钮事件绑定错误
command=Something.load_key(Something)会在初始化按钮时立即执行load_key方法,而非在点击按钮时触发,同时错误地将类本身作为self传入方法。缺失依赖模块导入
代码使用了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
相关产品推荐
相关产品推荐

