如何基于Tkinter表单输入计算礼品包装订单总成本?
礼品包装订单成本计算功能实现
核心计算逻辑
- 包装面积计算:根据选中的礼品形状,用对应公式计算包装所需面积:
- 长方体:
2*(高度*宽度 + 高度*深度 + 宽度*深度) - 圆柱体:
2*3.1416*半径*(半径 + 高度)(包含上下底) - 其他形状可按需扩展对应公式
- 长方体:
- 基础成本:包装面积 × 选中纸张的单价(低价0.4/高价0.75,单位:元/平方单位)
- 附加费用:
- 蝴蝶结:勾选则叠加固定费用(示例设为2元,可自行调整)
- 礼品标签:勾选则加1.50元;若需按字符数额外收费,可扩展逻辑(比如每超10字符加0.5元)
- 总成本:基础成本 + 所有附加费用之和
Tkinter代码实现示例
import tkinter as tk from tkinter import ttk, messagebox def calculate_total_cost(): # 获取选中的礼品形状 shape = shape_var.get() # 获取纸张单价 paper_price = 0.4 if paper_var.get() == "低价设计" else 0.75 # 获取尺寸数据并转换为数值 try: if shape == "长方体": height = float(height_entry.get()) width = float(width_entry.get()) depth = float(depth_entry.get()) area = 2 * (height*width + height*depth + width*depth) elif shape == "圆柱体": height = float(height_entry.get()) radius = float(radius_entry.get()) area = 2 * 3.1416 * radius * (radius + height) else: messagebox.showerror("错误", "请选择有效的礼品形状") return except ValueError: messagebox.showerror("错误", "尺寸输入必须为数字") return # 计算基础成本 base_cost = area * paper_price # 计算附加费用 extra_cost = 0 if bow_var.get(): extra_cost += 2.0 # 蝴蝶结费用,可自行调整 if label_var.get(): extra_cost += 1.50 # 可选:字符数额外收费逻辑 # char_count = len(label_text.get("1.0", tk.END).strip()) # if char_count > 10: # extra_cost += (char_count - 10) * 0.5 # 总成本 total_cost = base_cost + extra_cost # 显示结果,保留两位小数 result_label.config(text=f"订单总成本: ${total_cost:.2f}") # 创建主窗口 root = tk.Tk() root.title("礼品包装订单表单") # 礼品形状选择 shape_frame = ttk.LabelFrame(root, text="礼品形状") shape_frame.pack(padx=10, pady=5, fill="x") shape_var = tk.StringVar(value="长方体") ttk.Radiobutton(shape_frame, text="长方体", variable=shape_var, value="长方体").pack(side="left", padx=5) ttk.Radiobutton(shape_frame, text="圆柱体", variable=shape_var, value="圆柱体").pack(side="left", padx=5) # 尺寸输入区域 size_frame = ttk.LabelFrame(root, text="尺寸") size_frame.pack(padx=10, pady=5, fill="x") # 通用高度输入 ttk.Label(size_frame, text="高度:").grid(row=0, column=0, padx=5, pady=5) height_entry = ttk.Entry(size_frame) height_entry.grid(row=0, column=1, padx=5, pady=5) # 长方体尺寸 ttk.Label(size_frame, text="宽度:").grid(row=0, column=2, padx=5, pady=5) width_entry = ttk.Entry(size_frame) width_entry.grid(row=0, column=3, padx=5, pady=5) ttk.Label(size_frame, text="深度:").grid(row=0, column=4, padx=5, pady=5) depth_entry = ttk.Entry(size_frame) depth_entry.grid(row=0, column=5, padx=5, pady=5) # 圆柱体尺寸 ttk.Label(size_frame, text="半径:").grid(row=1, column=0, padx=5, pady=5) radius_entry = ttk.Entry(size_frame) radius_entry.grid(row=1, column=1, padx=5, pady=5) # 纸张设计选择 paper_frame = ttk.LabelFrame(root, text="纸张设计") paper_frame.pack(padx=10, pady=5, fill="x") paper_var = tk.StringVar(value="低价设计") ttk.Radiobutton(paper_frame, text="低价设计 ($0.4/平方单位)", variable=paper_var, value="低价设计").pack(side="left", padx=5) ttk.Radiobutton(paper_frame, text="高价设计 ($0.75/平方单位)", variable=paper_var, value="高价设计").pack(side="left", padx=5) # 附加服务 extra_frame = ttk.LabelFrame(root, text="附加服务") extra_frame.pack(padx=10, pady=5, fill="x") bow_var = tk.BooleanVar() ttk.Checkbutton(extra_frame, text="蝴蝶结 (+$2.00)", variable=bow_var).pack(side="left", padx=5) label_var = tk.BooleanVar() ttk.Checkbutton(extra_frame, text="礼品标签 (+$1.50)", variable=label_var).pack(side="left", padx=5) # 礼品标签字符输入(可选) label_text_frame = ttk.LabelFrame(root, text="礼品标签内容") label_text_frame.pack(padx=10, pady=5, fill="both", expand=True) label_text = tk.Text(label_text_frame, height=3) label_text.pack(fill="both", expand=True, padx=5, pady=5) # 计算按钮与结果显示 calc_btn = ttk.Button(root, text="计算总成本", command=calculate_total_cost) calc_btn.pack(padx=10, pady=10) result_label = ttk.Label(root, text="订单总成本: $0.00") result_label.pack(padx=10, pady=5) root.mainloop()
关键代码说明
- 输入校验:通过
try-except捕获尺寸输入的非数字情况,避免程序崩溃 - 形状适配计算:根据选中的礼品形状调用对应的面积计算公式,确保基础成本计算准确
- 附加费用逻辑:通过布尔变量获取复选框状态,叠加对应费用;可按需扩展字符数额外收费的逻辑
- 结果展示:将计算后的总成本格式化保留两位小数,显示在标签中
内容的提问来源于stack exchange,提问作者user25207541
相关产品推荐
相关产品推荐

