AttributeError错误求助:'Grid'对象不存在'tk'属性
解决Tkinter计算器报错:AttributeError: 'Grid' object has no attribute 'tk'
错误原因
- 误用Grid类作为容器:你将
Grid()实例赋值给mainFrame和innerFrame,但Grid是Tkinter的布局管理器类,并非承载组件的容器组件,不能作为Entry、Button等组件的父容器。 - 变量名拼写错误+覆盖:先创建了正确的Frame容器
mainFareme(拼写错误应为mainFrame)、innerFareme(拼写错误应为innerFrame),随后却用Grid()实例覆盖这些变量,导致后续组件找不到正确的父容器。 - Frame未布局到主窗口:创建的Frame组件未通过
pack()/grid()方法添加到主窗口中,无法正常显示。
修正后的代码
from tkinter import* import math root = Tk() root.title("Jupiter Notebook Calculator") root.resizable(width=False, height=False) root.geometry("452x580+500+40") # 修正变量名拼写,直接使用Frame作为容器,不再用Grid覆盖 mainFrame = Frame(root, bd=20, bg='gainsboro', relief=RIDGE) mainFrame.pack() # 将主Frame添加到主窗口 innerFrame = Frame(mainFrame, bd=10, bg='gainsboro', relief=RIDGE) innerFrame.pack() # 将内部Frame添加到主Frame class Calc(): def __init__(self): self.total =0 self.current ="" self.firsnum="" self.secondnum="" self.input_value = True self.check_sum=False self.op="" self.result=False added_value = Calc() # 现在innerFrame是正确的Frame容器,可以作为Entry的父组件 txtDisplay = Entry(innerFrame, font=('arial',18,'bold'), bd=10, width=28, justify=RIGHT) txtDisplay.grid(row=0, column=0, columnspan=4, pady=1) txtDisplay.insert(0, "0") numberpad = "789456123" i = 0 btn = [] for j in range(3 , 6): for k in range(3): btn.append(Button(innerFrame, width=6, height=2, font=('arial',18,'bold'), bd=7, text=numberpad[i])) btn[i].grid(row=j, column=k, pady=1) i += 1 # 补充自增逻辑,避免所有按钮显示同一个数字 root.mainloop()
关键修改说明
- 修正
mainFareme/innerFareme的拼写错误为mainFrame/innerFrame,取消用Grid()覆盖变量的操作。 - 给
mainFrame和innerFrame添加pack()方法,将它们布局到主窗口中。 - 补充按钮循环中的
i += 1逻辑,解决所有按钮显示同一数字的问题。
内容的提问来源于stack exchange,提问作者SCS
相关产品推荐
相关产品推荐

