Tkinter如何将单价与数量的乘积自动设为金额输入框的非编辑默认值
Tkinter凭证录入界面自动计算金额实现方案
你需要通过变量监听+输入框状态控制实现需求,具体修改逻辑如下:
- 为单价、数量输入框绑定
StringVar关联变量,监听变量内容变化事件 - 编写计算逻辑,处理非数值输入的异常场景,避免程序报错
- 将金额输入框默认设置为禁用状态,仅在程序赋值时临时开放编辑权限
完整修改后代码
import tkinter as tk from tkinter import * from PIL import Image, ImageTk from tkinter import ttk import mysql import mysql.connector from tkinter import messagebox import datetime from datetime import date from ttkwidgets.autocomplete import AutocompleteCombobox adde=Tk() frm3=Frame(adde) frm3.place(x=191,y=0,relwidth=1,relheight=1) frm3.configure(bg='#E5E4E2') # 定义关联变量 price_var = StringVar() qty_var = StringVar() # 金额自动计算函数 def calc_amount(*args): try: # 获取输入的数值,转换为浮点型 price_val = float(price_var.get().strip()) qty_val = float(qty_var.get().strip()) # 计算金额,保留2位小数符合财务场景要求 amount_val = round(price_val * qty_val, 2) # 临时开放金额输入框编辑权限,写入数值后再禁用 amount_01.config(state=NORMAL) amount_01.delete(0, END) amount_01.insert(0, str(amount_val)) amount_01.config(state=DISABLED) except ValueError: # 输入不是合法数字时清空金额 amount_01.config(state=NORMAL) amount_01.delete(0, END) amount_01.config(state=DISABLED) # 绑定变量变化监听 price_var.trace_add('write', calc_amount) qty_var.trace_add('write', calc_amount) # Unit price price = Label(frm3, text="Unit Price",bg='#E5E4E2', font=("times new roman", 10)).place(x=555, y=290) price_01 = Entry(frm3, textvariable=price_var) price_01.place(x=555, y=310, width=70) # Quantity qty = Label(frm3, text="Quantity",bg='#E5E4E2', font=("times new roman", 10)).place(x=635, y=290) qty_01 = Entry(frm3, textvariable=qty_var) qty_01.place(x=635, y=310, width=60) # Amount amount = Label(frm3, text="Amount",bg='#E5E4E2', font=("times new roman", 10)).place(x=705, y=290) amount_01 = Entry(frm3) amount_01.place(x=705, y=310, width =100) # 初始化金额输入框为禁用状态 amount_01.config(state=DISABLED) adde.title(" Voucher Entry ") adde.geometry("1400x700") adde.configure(bg='#659EC7') adde.mainloop()
实现说明
- 输入框状态控制:金额输入框默认设为
DISABLED,用户无法手动编辑,仅当程序需要写入计算结果时临时切换为NORMAL状态,写入完成后立即恢复禁用,完全满足只读要求。 - 异常兼容:当用户输入非数值内容、或其中一个输入框为空时,金额会自动清空,不会触发程序报错。
- 精度处理:计算结果默认保留2位小数,符合财务凭证的金额录入规范,你可以根据实际需求调整保留位数。
内容的提问来源于stack exchange,提问作者Govind Lekhak
相关产品推荐
相关产品推荐

