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

Tkinter如何对Entry输入框内的数值与指定数字进行乘除运算

错误点说明
  • 输入值获取时机错误:你在程序初始化阶段就执行了temp = dentry.get(),此时输入框为空,后续点击转换按钮用的永远是初始化时拿到的空值,需要把获取输入的逻辑移入convert函数内,点击转换时再读取输入
  • 类型未转换:Entry组件返回的是字符串类型,不能直接和数值做乘除运算,需要转成float类型
  • 换算逻辑缺失:系数错误设置为3.0,且没有处理「英里转公里」的分支逻辑
  • 缺少输入校验:如果用户输入非数字内容,直接做运算会导致程序崩溃,需要加异常判断
修正后可运行代码
import tkinter as tk
import tkinter.messagebox

# 自定义主窗口
root = tk.Tk()
root.title('GUI Assignment')

# 创建三个框架并布局
bframe = tk.LabelFrame(root, highlightthickness=0, borderwidth=0, padx=100, pady=50)
bframe.pack(side='bottom')
rframe = tk.LabelFrame(root, highlightthickness=0, borderwidth=0, padx=100, pady=50)
rframe.pack(side='right')
lframe = tk.LabelFrame(root, highlightthickness=0, borderwidth=0, padx=100, pady=50)
lframe.pack(side='left')

# 右侧框架的标签和输入框
dlabel = tk.Label(rframe, text = '输入距离: ')
dentry = tk.Entry(rframe, width=30)
dlabel.pack(side='left')
dentry.pack(side="right")

# 换算系数常量
CONV_RATE = 1.609

# 转换逻辑
def convert():
    # 点击转换时再读取输入框内容
    input_str = dentry.get().strip()
    # 校验输入是否为空
    if not input_str:
        tkinter.messagebox.showwarning('提示', '请先输入距离数值')
        return
    # 校验输入是否为合法数字
    try:
        dist_val = float(input_str)
    except ValueError:
        tkinter.messagebox.showerror('错误', '请输入合法的数字')
        return
    # 根据单选选项执行对应换算
    if radio_var.get() == 1:
        # 公里转英里
        res = dist_val / CONV_RATE
        tkinter.messagebox.showinfo('转换结果', f'{dist_val} 公里 = {res:.2f} 英里')
    else:
        # 英里转公里
        res = dist_val * CONV_RATE
        tkinter.messagebox.showinfo('转换结果', f'{dist_val} 英里 = {res:.2f} 公里')

# 底部功能按钮
convert_btn = tk.Button(bframe, text="转换", command=convert)
quit_btn = tk.Button(bframe, text='退出', command=root.destroy)
convert_btn.pack(side='left', padx=20)
quit_btn.pack(side='right', padx=20)

# 单选按钮变量
radio_var = tk.IntVar()
radio_var.set(1)

# 左侧单选按钮
rb_km2mi = tk.Radiobutton(lframe, text='公里转英里', variable=radio_var, value=1)
rb_mi2km = tk.Radiobutton(lframe, text='英里转公里', variable=radio_var, value=2)
rb_km2mi.pack(anchor='w')
rb_mi2km.pack(anchor='w')

root.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:06