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
相关产品推荐
相关产品推荐

