浮动是必需的(在Tkinter)

时间:2015-02-19 01:05:34

标签: python tkinter floating-point physics typeerror

我有一个问题,我仍然无法解决,特别是涉及tkinter。 尽管代码的某些部分是用西班牙语编写的,但我希望它不是问题。 当试图用Vel_in_y作为对立面来计算三角形的斜边时。

import tkinter
import math
window= tkinter.Tk()
frame = tkinter.Frame(window)
frame.pack()
Velocidad_in =tkinter.IntVar()
Angulo_desp = tkinter.IntVar()
Altura_max = tkinter.IntVar()
Alcan = tkinter.IntVar()
Temp = tkinter.IntVar()
Vel_in_y= tkinter.IntVar()
Vel_in_x= tkinter.IntVar()
var = [Velocidad_in,Angulo_desp ,Altura_max,Alcan,Temp,Vel_in_y,Vel_in_x]
opciones_de_Vel = ['Velocidad Inicial en X','Velocidad Inicial en Y','Modulo de Velocidad']
def Velocidad_Inicial(root):
    for (tipo,var) in  ((' La Velocidad Inicial en X',Vel_in_x),(' La Velocidad Inicial en Y',Vel_in_y),(' El Modulo de Velocidad',Velocidad_in)):
        label = tkinter.Label(frame,text= 'Inserte '+ tipo)
        label.pack()
        entry= tkinter.Entry(frame,textvariable = var)
        entry.pack()


def Angulo_Despegue(root):
    label = tkinter.Label(frame,text='Inserte el Angulo de despegue')
    label.pack()
    entry= tkinter.Entry(frame,textvariable = Angulo_desp)
    entry.pack()
def Altura_Maxima(root):
    label = tkinter.Label(frame,text='Inserte la Altura Maxima')
    label.pack()
    entry= tkinter.Entry(frame,textvariable = Altura_max)
    entry.pack()
def Alcance(root):
    label = tkinter.Label(frame,text='Inserte el Alcance')
    label.pack()
    entry= tkinter.Entry(frame,textvariable = Alcan)
    entry.pack()
def Tiempo(root):
    label = tkinter.Label(frame,text='Inserte el Tiempo')
    label.pack()
    entry= tkinter.Entry(frame,textvariable = Temp)
    entry.pack()
def calcular_modulo(root):
        modulo = Vel_in_y* math.sin(Angulo_desp)

        label = tkinter.Label(frame,textvariable=modulo)
        label.pack()
        if modulo == 0:
            modulo = math.sqrt(Vel_in_x**2+ Vel_in_y**2)

            label = tkinter.Label(frame,textvariable=modulo)
            label.pack()



button = tkinter.Button(frame,text='respuesta' ,command = lambda: calcular_modulo(window))
button.pack()                
menubar = tkinter.Menu(window)
option_menu =tkinter.Menu(menubar)
option_menu.add_command(label= 'Velocidad Inicial',command=lambda:Velocidad_Inicial(window))
option_menu.add_command(label= 'Angulo de Despegue',command=lambda:Angulo_Despegue(window))
option_menu.add_command(label= 'Altura Maxima',command=lambda:Altura_Maxima(window))
option_menu.add_command(label= 'Alcance',command=lambda:Alcance(window))
option_menu.add_command(label= 'Tiempo', command=lambda:Tiempo(window))
menubar.add_cascade(label= 'Tipo de Variable',menu=option_menu)
window.config(menu=menubar)

window.mainloop()

如果发现错误,我会提供所有反馈意见! 顺便说一句,当我运行此代码时,我得到一个错误说: TypeError:需要浮点数

2 个答案:

答案 0 :(得分:3)

  modulo = Vel_in_y* math.sin(Angulo_desp.get())

math.sin不知道如何处理IntVar ...你必须get

同样适用于您尝试访问变量值的其他任何地方

答案 1 :(得分:1)

我不明白你为什么使用IntVal而不是int。 您需要使用get函数将IntVal类型转换为int类型。 这是你的代码,它是固定的:

 def calcular_modulo(root): 
    modulo = Vel_in_y.get()* math.sin(Angulo_desp.get())

    label = tkinter.Label(frame,textvariable=modulo)
    label.pack()
    if modulo == 0:
        modulo = math.sqrt(Vel_in_x.get()**2+ Vel_in_y.get()**2)

        label = tkinter.Label(frame,textvariable=modulo)
        label.pack()