Python Tkinter GUI编程BMI计算器报module对象不可调用问题咨询
问题原因
你代码的核心错误是对Tkinter的基础用法理解有误:
import tkinter as tk里的tk是导入的模块对象,不是可调用的函数,你多处写tk(xxx)尝试调用模块,自然会报TypeError: 'module' object is not callable的错误- 你当前的代码逻辑还是命令行输入输出的逻辑,没有用到Tkinter的GUI组件,就算修复调用错误也无法生成图形界面
- 最后写的
m.mainloop()里的m变量没有预先定义,运行到这一步也会触发报错
正确实现带GUI的BMI计算器代码
import tkinter as tk from tkinter import ttk def calculate_bmi(): try: # 读取用户输入的体重身高 weight = float(weight_entry.get()) height = float(height_entry.get()) # 计算BMI值保留两位小数 bmi = round(weight / (height / 100) ** 2, 2) # 判断体重等级 if bmi <= 17.5: status = "严重偏瘦" elif bmi <= 18.5: status = "偏瘦" elif bmi <= 25: status = "正常体重" elif bmi <= 30: status = "超重" elif bmi <= 40: status = "肥胖" else: status = "严重肥胖" # 输出结果到GUI界面 result_label.config(text=f"BMI值: {bmi}\n体重状态: {status}") except ValueError: result_label.config(text="请输入有效的数字!") # 初始化GUI主窗口 root = tk.Tk() root.title("BMI计算器") root.geometry("300x250") # 生成各类GUI组件 ttk.Label(root, text="体重(kg):").pack(pady=5) weight_entry = ttk.Entry(root) weight_entry.pack(pady=2) ttk.Label(root, text="身高(cm):").pack(pady=5) height_entry = ttk.Entry(root) height_entry.pack(pady=2) calc_btn = ttk.Button(root, text="计算BMI", command=calculate_bmi) calc_btn.pack(pady=10) result_label = ttk.Label(root, text="") result_label.pack(pady=10) # 启动GUI事件循环 root.mainloop()
代码说明
- 首先创建Tkinter主窗口对象
root,所有GUI组件都挂载在这个窗口上 - 用
Entry组件接收用户输入的体重和身高,替换命令行的input() - 将计算按钮的点击事件绑定到
calculate_bmi函数,点击时自动完成读取输入、计算、结果更新的全流程 - 用
Label组件展示计算结果和体重状态,替换命令行的print() - 最后调用
root.mainloop()启动GUI事件循环,保持窗口持续显示
内容的提问来源于stack exchange,提问作者DSG
相关产品推荐
相关产品推荐

