You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为VPython按钮创建并绑定弹簧振子周期计算函数?

问题修复方案

报错根因

  • 输出时间周期的scene.append_to_caption代码放在了calculate函数外部,程序初始化运行时t变量还未定义,直接触发报错
  • 质量、刚度输入回调函数中的x、y是局部变量,calculate函数无法直接读取
  • 弹簧周期公式书写错误,正确公式为T = 2π * √(m/k),原代码写反了刚度和质量的位置

修正后代码

你只需要替换原来报错部分的代码即可:

# 定义全局变量存储用户输入的质量和刚度
m_val = 1.0
k_val = 1.0

# 质量输入
def m_callback(x):
    global m_val
    m_val = x.number
m_input = winput(bind=m_callback, width=130, prompt=" Enter mass(m):       ", type="numeric")
wtext(text=" kg")
scene.append_to_caption('\n\n\n')

# 刚度输入
def k_callback(y):
    global k_val
    k_val = y.number
k_input = winput(bind=k_callback, width=130, prompt=" Enter Stiffness(k):   ", type="numeric")
wtext(text=" N/m")
scene.append_to_caption('\n\n')

# 结果显示组件
result_text = wtext(text="Time Period = 未计算\n")
scene.append_to_caption('\n\n')

# 周期计算函数
def calculate():
    global m_val, k_val, result_text
    if k_val <= 0:
        result_text.text = "Time Period = 刚度不能小于等于0"
        return
    T = 2 * 3.14159 * sqrt(m_val / k_val)
    result_text.text = f"Time Period = {round(T, 3)} s"

button(bind=calculate ,text ="<b>  Calculate  </b>",color=color.white,background=color.blue)

修改说明

  • 新增全局变量存储用户输入的质量、刚度数值,保证计算函数可以正常读取
  • 调整了回调函数命名,避免和输入组件变量名冲突导致的覆盖问题
  • 新增结果显示组件,计算完成后直接更新内容,不用反复拼接caption
  • 修正了周期计算公式,补充了刚度为0的异常判断,避免程序崩溃
  • 将结果输出逻辑移到计算函数内部,只有点击计算按钮时才会执行,不会出现变量未定义报错

内容的提问来源于stack exchange,提问作者Manasi Juwalekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:48:04