如何在Kivy的kv文件中显示变量值 实现BMI计算结果弹窗展示
Kivy BMI计算器弹窗显示BMI值解决方案
核心问题梳理
- 你计算BMI时仅生成了局部变量
bmi,没有赋值给MyGrid类预定义的self.bmi属性,类属性始终为初始值0 - 弹窗布局类
P没有定义接收BMI值的属性,无法在kv中关联读取 - 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
相关产品推荐
相关产品推荐

