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

如何基于Tkinter表单输入计算礼品包装订单总成本?

礼品包装订单成本计算功能实现

核心计算逻辑

  1. 包装面积计算:根据选中的礼品形状,用对应公式计算包装所需面积:
    • 长方体:2*(高度*宽度 + 高度*深度 + 宽度*深度)
    • 圆柱体:2*3.1416*半径*(半径 + 高度)(包含上下底)
    • 其他形状可按需扩展对应公式
  2. 基础成本:包装面积 × 选中纸张的单价(低价0.4/高价0.75,单位:元/平方单位)
  3. 附加费用:
    • 蝴蝶结:勾选则叠加固定费用(示例设为2元,可自行调整)
    • 礼品标签:勾选则加1.50元;若需按字符数额外收费,可扩展逻辑(比如每超10字符加0.5元)
  4. 总成本:基础成本 + 所有附加费用之和

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()

关键代码说明

  1. 输入校验:通过try-except捕获尺寸输入的非数字情况,避免程序崩溃
  2. 形状适配计算:根据选中的礼品形状调用对应的面积计算公式,确保基础成本计算准确
  3. 附加费用逻辑:通过布尔变量获取复选框状态,叠加对应费用;可按需扩展字符数额外收费的逻辑
  4. 结果展示:将计算后的总成本格式化保留两位小数,显示在标签中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:54:52