它是一个图形界面,旨在从极坐标形式转到虚数的几何形式。
我收到以下错误:
Traceback (most recent call last): File "main.py", line 33, in <module> boton1=Button(ventana,text="Calcular",command=geo_polar()).grid(row=1,column=2) File "main.py", line 22, in geo_polar solucion=print("Radio= "+p1+" y angulo= "+p2) TypeError: Can't convert 'float' object to str implicitly
这是代码:
from tkinter import *
import math
import time
ventana=Tk()
dato1=IntVar()
dato2=IntVar()
dato3=StringVar()
dato4=IntVar()
dato5=IntVar()
dato6=StringVar()
def geo_polar():
p1=math.sqrt(dato1.get()*dato1.get()+dato2.get()*dato2.get())
try:
p2=math.atan(dato2.get()/dato1.get())
pass
except Exception as e:
print("ERROR")
solucion=print("Radio= "+p1+" y angulo= "+p2)
entrada.set(solucion)
etiqueta1=Label(ventana,text="Pasar de geometrica a
polar").grid(row=0,column=0)
entrada1=Entry(ventana,textvariable=dato1).grid(row=1,column=0)
entrada2=Entry(ventana,textvariable=dato2).grid(row=1,column=1)
boton1=Button(ventana,text="Calcular",command=geo_polar()).grid(row=1,column=2)
entada3=Entry(ventana,textvariable=dato3).grid(row=1,column=3)
etiqueta2=Label(ventana,text="Pasar de polar a
geometrica").grid(row=2,column=0)
entrada4=Entry(ventana,textvariable=dato4).grid(row=3,column=0)
entada5=Entry(ventana,textvariable=dato5).grid(row=3,column=1)
boton2=Button(ventana,text="Calcular").grid(row=3,column=2)
entada6=Entry(ventana,textvariable=dato6).grid(row=3,column=3)
ventana.mainloop()
首先,错误是因为 Python 从不进行隐式类型转换。您正在尝试直接连接
str
对象float
:为此,您必须对
float
a进行显式转换str
:现在,连接字符串是一个非常低效的过程,因为它们是不可变的,这意味着在连接时你必须创建一个新对象
str
。如果您使用它会更简单str.format
:或者在 Python >= 3.6 中格式化的字符串文字:
另一方面,您还有一些错误:
在函数变量中
solucion
:首先,
entrada
它在您的代码中不存在,无论如何它必须是dato3
.另一方面,它
solucion
存储 的返回print
,即None
。它必须包含要分配给 的字符串StringVar
,print
在这种情况下,它在 GUI 中没有意义:传递单击按钮时要调用的函数时会发生另一个错误:
这会导致(在这种情况下)
command
的返回被传递,因为在使用它时你正在调用它。您必须将引用传递给函数,而不是返回:geo_polar
None
()
entada5
您在byentrada5
和entada6
by变量的名称中也有一些拼写错误entrada6
。除了上述之外,有些事情虽然不是错误,但您应该考虑:
通过 widcard(
*
) 导入在 Python 中通常是一种不好的做法,并且只应在合理的情况下使用(并且缩短要编写的代码不是其中之一)。从广义上讲,不应该使用它,因为不明确指定标识符所属的命名空间会在代码中丢失可读性,它会不必要地填充当前命名空间,并且从上面派生出来,它可能导致不同命名空间之间的标识符被屏蔽,随之而来的错误。您执行以下操作没有任何意义:
通过这样做,
entry
您不是指tkinter.Entry
created 的实例(或任何其他小部件),而是指其方法的返回grid
,即再次None
. 这使它entry
毫无用处。还是您直接:或者如果您以后需要引用小部件,请在单独的行上应用网格:
这同样适用于
pack
和place
。考虑到以上所有,代码可以是:
如果您为变量提供更具描述性的名称,这将有利于代码的可读性,以便阅读代码的人首先会发现它更易于理解。有了这个,您可以继续完成应用程序。