我一直试图在Python 33上使用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()
这是我的错误信息 -
Traceback (most recent call last):
File "C:/Users/Dale/Desktop/programming/Python/tkinterpythagoras.py", line 18, in <module>
asq = E1**2
TypeError: unsupported operand type(s) for ** or pow(): 'Entry' and 'int'
请不要粗暴对我说。我是Tkinter的初学者!
答案 0 :(得分:3)
您的程序遇到了一些问题:首先,E1
和E2
是Entry小部件,而不是数字,因此您必须先检索该值:
try:
val = int(E1.get())
except ValueError:
# The text of E1 is not a valid number
其次,在Button的命令选项中,您调用函数showsum()
而不是传递引用:
B1 = Button(root, ..., command=showsum) # Without ()
此外,此函数始终显示先前计算的相同结果,因此您应该在此函数中检索窗口小部件的值,而不是之前。最后,from tkinter import *
Button位于全局命名空间中,因此您应该删除之前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!")
答案 1 :(得分:2)
该错误消息非常清楚。您正在尝试将Entry
对象提升为某种功能,并且您无法对Entry
个对象执行此操作,因为它们不是数字而是用户界面元素。相反,你想要 in Entry
对象,即用户输入的内容,你可能想要将它转换为整数或浮点数。所以:
asq = float(E1.get()) ** 2