You need to enable JavaScript to run this app. 使用tkinter开发几何计算器时出现Square_Area未定义的NameError报错求助
优惠活动
大模型
产品
解决方案
定价
更多

使用tkinter开发几何计算器时出现Square_Area未定义的NameError报错求助

问题根因

Python是解释型语言,代码按从上到下的顺序逐行执行。你在创建绑定Square_Area函数的Button控件时,Square_Area的函数定义放在了代码更靠后的位置,执行到Button初始化这行时,Python还没有加载到这个函数的定义,因此会抛出名称未定义的错误,和函数名本身是否拼写一致无关。

修复方案

把Square_Area函数的定义移动到创建正方形计算界面的代码块之前即可,调整后的完整可运行代码如下:

from tkinter import *

root = Tk()

# setting up window
root.geometry("600x400")
root.minsize(600, 400)
root.maxsize(600, 400)
root.title("Shape Calculator")

# declaring variable
SquareSide = StringVar()
SquareArea = StringVar()

# 提前定义所有需要绑定到控件的函数
# area result functions
def Square_Area():
    side = float(SquareSide.get())
    area = side*side
    SquareArea.set(f"{area}")

# function to clear screen
def kill_frame():
    mt.pack_forget()
    saf.pack_forget()
    tsaf.pack_forget()

# menu functions
# area functions
def square_area():
    kill_frame()
    tsaf.pack(fill="both")
    saf.pack(side=LEFT, anchor="nw")

# main page text
mt = Frame(root)
mt.pack()
title = Label(mt, fg="red", text="Select any field that you want to calculate",
              font=("arial", 18, "bold"))
title.pack(padx=62, pady=185, side=LEFT)

# layout for area of square
tsaf = Frame(root)
saf = Frame(root)
Label(tsaf, bg="gray", fg="blue", text="Square Area Calculator",
     font=("calibri", 18, "italic")).pack(fill="x", ipady=10)
Label(saf, fg="red", text="Side of Square:",
      font=("calibri", 18, "italic")).grid(row=0, column=0, pady=30, padx=30)
Label(saf, fg="red", text="Area of Square:",
      font=("calibri", 18, "italic")).grid(row=1, column=0, pady=30, padx=30)
Entry(saf, fg="blue", borderwidth=6, textvariable=SquareSide,
      font=("comicsansms", 16, "bold")).grid(row=0, column=1, pady=30, padx=20, ipadx=50)
Entry(saf, fg="blue", borderwidth=6, textvariable=SquareArea,
      font=("comicsansms", 16, "bold")).grid(row=1, column=1, pady=30, padx=20, ipadx=50)
Button(saf, fg="blue", text="Get Area", activeforeground="red", borderwidth=4, command = Square_Area,
      font=("comicsansms", 16, "italic")).grid(row=2, column=1, pady=30, padx=50, ipadx=50)

# making the menu
main_menu = Menu(root)
# 2d shape area
m1 = Menu(main_menu, tearoff=0)
m1.add_command(label="Square", command = square_area)
main_menu.add_cascade(label="Area calculator", menu=m1)

root.config(menu=main_menu)

root.mainloop()
额外优化建议
  • 后续开发建议把所有自定义函数的定义都放在业务控件初始化代码的前面,避免同类问题重复出现
  • 可以给输入框增加异常捕获逻辑,避免用户输入非数字内容时程序崩溃

内容的提问来源于stack exchange,提问作者Sarthak Hingankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:24:04