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

AttributeError错误求助:'Grid'对象不存在'tk'属性

解决Tkinter计算器报错:AttributeError: 'Grid' object has no attribute 'tk'

错误原因

  1. 误用Grid类作为容器:你将Grid()实例赋值给mainFrame和innerFrame,但Grid是Tkinter的布局管理器类,并非承载组件的容器组件,不能作为Entry、Button等组件的父容器。
  2. 变量名拼写错误+覆盖:先创建了正确的Frame容器mainFareme(拼写错误应为mainFrame)、innerFareme(拼写错误应为innerFrame),随后却用Grid()实例覆盖这些变量,导致后续组件找不到正确的父容器。
  3. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:31:10