为何Main类中Show_Page()无法访问其他类方法?报未定义错误
问题分析与解决:Main类方法无法访问类内其他方法
错误原因
你的代码存在两个核心问题:
- 类中的方法没有以
self作为第一个参数,Python会将它们当作普通函数,而非类的实例方法,无法通过类实例访问 - 调用类内方法时未使用
self.方法名的引用形式,导致解释器找不到对应的方法
修正步骤
- 给所有类内方法添加
self参数,将它们定义为实例方法 - 调用类内方法时,通过
self.方法名的形式引用 - 主入口处先实例化Main类,再调用Show_Page方法
修正后的完整代码
import tkinter as tk from tkinter import ttk, messagebox class Main: def __init__(self): self.style = ttk.Style() self.style.map("C.TButton", foreground=[('pressed', 'red'), ('active', 'blue')], background=[('pressed', '!disabled', 'black'), ('active', 'white')] ) def selectReports(self): messagebox.showinfo("EDP", "All reports") def showReports(self): messagebox.showinfo("EDP", "Select reports") def Show_Page(self): program = tk.Tk() program.geometry("626x431") monitor = ttk.Button(text="Monitor", command=self.showReports, style="C.TButton") monitor.pack(pady=100) review = ttk.Button(text="Review", command=self.selectReports, style="C.TButton") review.pack(pady=0) program.mainloop() if __name__ == "__main__": app = Main() app.Show_Page()
关键修正说明
- 新增
__init__方法,将style初始化放在实例构造函数中,避免类级初始化可能引发的异常 - 给每个方法添加
self参数,使其成为实例方法,这样才能通过self访问类内其他方法和属性 - 将Button的command参数改为
self.showReports和self.selectReports,明确引用实例的方法 - 主入口创建Main类的实例
app,再调用app.Show_Page()——实例方法必须通过类实例调用
内容的提问来源于stack exchange,提问作者Ayon Moitra
相关产品推荐
相关产品推荐

