Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python **或pow()的操作数类型不受支持:';条目';和';int';?_Python_Python 3.x_Tkinter - Fatal编程技术网

Python **或pow()的操作数类型不受支持:';条目';和';int';?

Python **或pow()的操作数类型不受支持:';条目';和';int';?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我一直在尝试在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.

我一直在尝试在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()
这是我的错误信息-

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'
回溯(最近一次呼叫最后一次):
文件“C:/Users/Dale/Desktop/programming/Python/tkinterpythagoras.py”,第18行,在
asq=E1**2
TypeError:不支持**或pow()的操作数类型:“Entry”和“int”

请不要对我粗暴。我是Tkinter的初学者

这个错误信息非常清楚。您正试图将
Entry
对象提升到某个级别,而
Entry
对象不能这样做,因为它们不是数字,而是用户界面元素。相反,您需要
条目
对象中的内容,即用户输入的内容,并且您可能希望将其转换为整数或浮点。因此:

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

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

try:
    val = int(E1.get())
except ValueError:
    # The text of E1 is not a valid number
其次,在按钮的命令选项中,调用函数
showsum()
,而不是传递引用:

B1 = Button(root, ..., command=showsum)  # Without ()
此外,此函数始终显示先前计算的相同结果,因此您应该检索此函数中小部件的值,而不是之前的值。最后,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!")

你打算怎么做?它应该给出三角形上C的边,用毕达哥拉斯定理