需要浮动(在 Tkinter 中)

Float is required (in Tkinter)

我有一个问题我仍然无法解决,特别是涉及到 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()

如果您发现错误,我将感谢所有反馈! 顺便说一句,当我 运行 这段代码时,我收到一条错误消息: 类型错误:需要一个浮点数

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

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

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

我不明白你为什么使用 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()