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

为何Main类中Show_Page()无法访问其他类方法?报未定义错误

问题分析与解决:Main类方法无法访问类内其他方法

错误原因

你的代码存在两个核心问题:

  1. 类中的方法没有以self作为第一个参数,Python会将它们当作普通函数,而非类的实例方法,无法通过类实例访问
  2. 调用类内方法时未使用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()

关键修正说明

  1. 新增__init__方法,将style初始化放在实例构造函数中,避免类级初始化可能引发的异常
  2. 给每个方法添加self参数,使其成为实例方法,这样才能通过self访问类内其他方法和属性
  3. 将Button的command参数改为self.showReports和self.selectReports,明确引用实例的方法
  4. 主入口创建Main类的实例app,再调用app.Show_Page()——实例方法必须通过类实例调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:24:24