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

如何在Kivy的kv文件中显示变量值 实现BMI计算结果弹窗展示

Kivy BMI计算器弹窗显示BMI值解决方案

核心问题梳理

  1. 你计算BMI时仅生成了局部变量bmi,没有赋值给MyGrid类预定义的self.bmi属性,类属性始终为初始值0
  2. 弹窗布局类P没有定义接收BMI值的属性,无法在kv中关联读取
  3. kv中字符串和数值直接拼接会触发类型错误,需要先把数值转成字符串

修改方案

1. 调整Python代码

给弹窗布局类P添加BMI属性

class P(FloatLayout):
    bmi = NumericProperty(0) # 新增此行,用来接收传入的BMI数值

修改btn方法,完成属性赋值和参数传递

def btn(self):
    height = float(self.name.text)
    weight = float(self.email.text)
    self.bmi = weight/(height*height) # 把计算结果赋值给实例属性
    
    print("Name:", self.name.text, "email:", self.email.text, "bmi:", str(self.bmi))
    self.name.text = ""
    self.email.text = ""
    show_popup(self.bmi) # 把BMI值传给弹窗生成函数

改造show_popup函数接收参数

def show_popup(bmi_val):
    show = P(bmi = bmi_val) # 实例化弹窗布局时传入BMI值

    popupWindow = Popup(title="BMI", content=show, size_hint=(None,None),size=(400,400))
    popupWindow.open()

2. 调整kv文件配置

修改<P>节点下的Label文本规则,完成数值转字符串拼接,这里保留两位小数方便阅读:

<P>:
    Label:
        text: "Your BMI is: {:.2f}".format(root.bmi)
        size_hint: 0.6, 0.2
        pos_hint: {"x":0.2, "top":1}

如果你的Kivy版本支持f字符串,也可以写成:
text: f"Your BMI is: {root.bmi:.2f}"

内容的提问来源于stack exchange,提问作者Jan Dalhuysen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:57:03