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
相关产品推荐
相关产品推荐

