如何将计算逻辑整合到Tkinter 3×3网格GUI并显示结果?
解决Tkinter网格计算结果显示问题
我现有一段Tkinter代码,能生成3×3的输入网格,点击"Calculate"按钮仅会遍历输入框值并换行打印:
from tkinter import * rows = [] for i in range(3): cols = [] for j in range(3): e = Entry(relief=RIDGE) e.grid(row=i, column=j, sticky=NSEW) e.insert(END, '%d.%d' % (i, j)) cols.append(e) rows.append(cols) def onPress(): for row in rows: for col in row: col.get(), print() Button(text='Calculate', command=onPress).grid() mainloop()
我需要整合以下计算逻辑:
x = r_1[0] + r_2[0] - r_3[0] y = r_1[1] + r_2[1] - r_3[1] z = r_1[2] + r_2[2] - r_3[2] num = x + y - z list = [x, y, z] i = 0 while (i < 3): fin = 2000*list[i]*num print(fin) i = i + 1
其中r_1[0]对应网格第一行第一个输入框的值,r_2[0]对应第二行第一个输入框的值,以此类推。要求点击按钮后,将计算得到的三个结果显示在"Calculate"按钮下方的网格区域中。
修改后的完整代码
from tkinter import * rows = [] for i in range(3): cols = [] for j in range(3): e = Entry(relief=RIDGE) e.grid(row=i, column=j, sticky=NSEW) e.insert(END, '%d.%d' % (i, j)) cols.append(e) rows.append(cols) # 创建结果显示标签,布局在按钮下方 result_labels = [] for j in range(3): lbl = Label(text="结果", relief=SUNKEN) lbl.grid(row=4, column=j, sticky=NSEW) result_labels.append(lbl) def onPress(): # 读取输入框内容并转为数值类型 r_1 = [float(row[0].get()) for row in rows] r_2 = [float(row[1].get()) for row in rows] r_3 = [float(row[2].get()) for row in rows] # 执行计算逻辑 x = r_1[0] + r_2[0] - r_3[0] y = r_1[1] + r_2[1] - r_3[1] z = r_1[2] + r_2[2] - r_3[2] num = x + y - z calc_list = [x, y, z] # 更新结果标签内容 for i in range(3): fin = 2000 * calc_list[i] * num # 保留两位小数优化显示效果 result_labels[i].config(text=f"{fin:.2f}") # 调整按钮布局,让按钮横跨三列 Button(text='Calculate', command=onPress).grid(row=3, column=0, columnspan=3, sticky=NSEW) mainloop()
关键改动说明
- 新增
result_labels列表,用于存储三个结果显示标签,固定布局在按钮下方的第4行 - 重构
onPress函数:- 将输入框的字符串内容转为float类型,避免计算时出现类型错误
- 按照需求完成全部计算逻辑
- 遍历结果标签,将计算结果更新到标签文本中
- 调整按钮布局,设置
columnspan=3让按钮横跨三列,提升界面美观度
内容的提问来源于stack exchange,提问作者Thando
相关产品推荐
相关产品推荐

