我正在制作一个科学计算器(这是一个测试,不是我的源代码,我想测试一下,看看我是否仍然会得到相同的错误(我确实))。例如,如果我输入一个数字x并按下平方根按钮,我的程序崩溃并显示以下错误:抛出异常'str'对象没有属性'sqrt'。我的num_1和f_num都注册为float并获得分配给它们的值,我知道,因为我使用visual studio,当我悬停在这些变量上时,它会突出显示两者都是float,并且分配的值(即。256)。对不起,如果我的解释是坏的,我是一个新手程序员很少或没有python的知识,这也是我第一次尝试建立一个GUI。提前谢谢你。
import math
from tkinter import *
def sqrt(first_number):
global math
global f_num
math="sqrt"
f_num=float(first_number)
def button_equal(second_number):
num_1=f_num
if math == "sqrt":
Panel.delete(0, END)
Panel.insert(0, math.sqrt(num_1))
def button_click(number):
# Panel.delete(0, END)
Panel.insert(0, number)
root = Tk()
root.title("scientific calculator")
root.resizable(width=False, height = False)
root.geometry("400x492+460+40")
myButton = Button(root, text="1",padx=3)
MainFrame = Frame( root, bd=20, pady=2, relief = RIDGE).grid()
Panel = Entry(root, font=("default", 20), bd=2, justify="right")
Panel.place(height=100, width=327, x=3,y=25) # The width of the panel is the value of the x axis on root.geometry - 3px on each side for margin
Panel.insert(0, "0")
B17 = Button(root, font=("default", 15), fg="orange", bg="#696969", text="1", command=lambda: button_click(1))
B17.place(width=75, height=50, x=8, y=330)
B18 = Button(root, font=("default", 15), fg="orange", bg="#696969", text="2", command=lambda: button_click(2))
B18.place(width=75, height=50, x=87, y=330)
B19 = Button(root, font=("default", 15), fg="orange", bg="#696969", text="3", command=lambda: button_click(3))
B19.place(width=75, height=50, x=167, y=330)
B6 = Button(root, font=("default", 15), fg="orange", bg="#696969", text="x^", command=lambda: sqrt(Panel.get()))
B6.place(width=75, height=50, x=87, y=180)
B24 = Button(root, font=("default", 15), fg="orange", bg="#696969", text="=", command=lambda: button_equal(Panel.get()))
B24.place(width=75, height=50, x=245, y=380)
calc = Frame( MainFrame, bd=20, pady=2, relief = RIDGE).grid()
root.mainloop()
我尝试过以不同的方式初始化函数,例如,我尝试过强制变量的类型,尽管理论上我不需要,因为python自己会这样做。我还尝试在first_number函数中初始化math函数,但还是一无所获。一般来说,无论我尝试失败,所以一段时间后,我不确定这是一个编程或逻辑错误。尽管如此,我还是认为这是一个逻辑错误,因为我也尝试过其他编译器,但都无济于事。
您已经将math声明为一个变量和一个包。Python很困惑。将全局变量重命名为math(或完全删除全局变量)
你得到了错误,因为你设置math为字符串。