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

Python运行报错:'main'对象无'update_question_number'属性,如何解决?

解决Tkinter中AttributeError: 'main'对象没有属性'update_question_number'的问题

兄弟,这个报错其实非常直白——你的main类里压根没定义update_question_number这个方法,但代码里肯定有某个地方在调用它。从你贴的代码片段看,main类的初始化方法还没写完(最后是sel...),大概率是你后续的逻辑里用到了这个方法,但忘了在类里实现,或者方法名写错了。

一步步排查的思路

我给你整理几个实用的排查方向:

  • 先定位调用位置:全局搜索你的代码,找出所有self.update_question_number()的调用处,比如按钮的command参数、某个回调函数里。比如可能是类似Button(..., command=self.update_question_number)的代码。
  • 检查方法名的拼写和大小写:Python对大小写敏感,别把update_question_number写成UpdateQuestionNumber或者update_question_num这种不一致的名字。
  • 确认方法属于main类:这个方法必须是main类的成员方法,也就是要缩进在class main:下面,不能写成类外面的普通函数。比如下面这种结构才是正确的:
    class main:
        def __init__(self, master):
            # 你的初始化代码
            pass
    
        # 这个方法必须缩进在类内部!
        def update_question_number(self):
            # 这里写你的方法逻辑
            pass
    
  • 别把方法写错类:如果你的代码还有其他类,别不小心把这个方法定义到其他类里了,导致main对象找不到它。

具体解决示例

假设你是做答题类程序,需要更新题目序号,那你可以在main类里补上这个方法,比如:

class main:
    def __init__(self,master):
        self.master = master
        self.username = StringVar()
        self.password = StringVar()
        # 先初始化题目序号变量
        self.question_number = 1
        # 假设你有个显示题目的标签
        self.question_label = Label(master, text=f"第{self.question_number}题")
        self.question_label.pack()
        # 绑定按钮到这个方法
        self.next_btn = Button(master, text="下一题", command=self.update_question_number)
        self.next_btn.pack()

    # 补上缺失的update_question_number方法
    def update_question_number(self):
        self.question_number += 1
        self.question_label.config(text=f"第{self.question_number}题")
        # 这里还可以加加载新题目、验证答案等逻辑

另外,顺便提个小问题:你创建数据库表的时候,password字段的类型写成了TEX,应该是TEXT,这个虽然和当前报错无关,但后续会导致数据库操作出问题,建议改成:

c.execute('CREATE TABLE IF NOT EXISTS user (username TEXT NOT NULL ,password TEXT NOT NULL);')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:12:11