对于求幂运算,'Entry'和'int'的操作数类型不受支持?

2024-09-26 18:05:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试使用python33上的Tkinter来制作一个毕达哥拉斯定理计算器,但是遇到了一个小问题。在

这是我的密码-

from tkinter import *
import math

root = Tk()

L1 = Label(root, text="A = ")
L1.pack()

E1 = Entry(root, bd =5)
E1.pack()

L2 = Label(root, text="B = ")
L2.pack()

E2 = Entry(root, bd =5)
E2.pack()

asq = E1**2
bsq = E2**2

csq = asq + bsq
ans = math.sqrt(csq)

def showsum():
    tkMessageBox.showinfo("Answer =", ans)

B1 = tkinter.Button(root, text="Click This To Calculate!", command = showsum())
B1.pack()

root.mainloop()

这是我的错误信息-

^{pr2}$

请不要对我粗暴。我完全是Tkinter的初学者!在


Tags: textimportl1tkintermathrootlabelbd
2条回答

这个错误信息非常清楚。您试图将一个Entry对象提升到某种程度,而不能用Entry对象来实现,因为它们不是数字而是用户界面元素。相反,您需要的是Entry对象中的,即用户输入的内容,您可能希望将其转换为整数或浮点。所以:

asq = float(E1.get()) ** 2

程序中存在一些问题:首先,E1和{}是条目小部件,而不是数字,因此必须先检索值:

try:
    val = int(E1.get())
except ValueError:
    # The text of E1 is not a valid number

其次,在按钮的command选项中,您正在调用函数showsum(),而不是传递引用:

^{pr2}$

此外,此函数始终显示先前计算的结果,因此您应该在此函数中检索小部件的值,而不是之前。最后,with from tkinter import *按钮在全局命名空间中,因此您应该删除它之前对tkinter的引用。在

所以最后showsum可能与此类似:

def showsum():
    try:
        v1, v2 = int(E1.get()), int(E2.get())
        asq = v1**2
        bsq = v2**2
        csq = asq + bsq
        tkMessageBox.showinfo("Answer =", math.sqrt(csq))
    except ValueError:
        tkMessageBox.showinfo("ValueError!")

相关问题 更多 >

    热门问题