python - 使用 tkinter 时出现名称错误
问题描述
我正在制作一个可以计算各种形状的面积、tsa、lsa、体积等的应用程序,但我收到了这个错误:
NameError:未定义名称“Square_Area”
但是该函数的名称与该行中的函数完全相同我很困惑这是出现错误的代码位
# 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)
这是按钮正在使用的功能
def Square_Area():
side = float(SquareSide.get())
area = side*side
SquareArea.set(f"{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()
# 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)
# menu functions
# area functions
def square_area():
kill_frame()
tsaf.pack(fill="both")
saf.pack(side=LEFT, anchor="nw")
# function to clear screen
def kill_frame():
mt.pack_forget()
saf.pack_forget()
tsaf.pack_forget()
# getting results
# area result functions
def Square_Area():
side = float(SquareSide.get())
area = side*side
SquareArea.set(f"{area}")
# 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()
我已经删除了关于其他形状的所有内容,如果有点凌乱,我只是留下了方形部分
解决方案
您需要在引用它之前定义该函数。由于您没有使用类,因此您正在执行 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()
def square_area():
kill_frame()
tsaf.pack(fill="both")
saf.pack(side=LEFT, anchor="nw")
def Square_Area():
side = float(SquareSide.get())
area = side*side
SquareArea.set(f"{area}")
# 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)
# menu functions
# area functions
# function to clear screen
def kill_frame():
mt.pack_forget()
saf.pack_forget()
tsaf.pack_forget()
# getting results
# area result functions
# 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()
推荐阅读
- python - 最小化权重矩阵 Keras 中非零元素的数量
- hyperledger-fabric - Azure Hyperledger Fabric:与网络交互
- python - 没有python对象的cython中的高效矩阵运算
- javascript - 谷歌可视化的多色折线图
- swift - 如何使用 Swift 通过我的应用在业务页面的“访客帖子”上发帖
- ios - iOS 确保 iPhone SE 上的 UINavigationBar 中的栏按钮项显示为全尺寸
- node.js - 获得连续的“请求率很大”错误
- sql - 无法调用我的光标的输出以在输出中使用
- c - 与 Go 之间的 C 指针转换
- azure - Azure SSL 证书标签