tkinter==简易客户管理系统

code

import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import csv
import os


# 创建客户管理系统
class CustomerManager:
    def __init__(self, root):
        self.root = root
        self.root.title("客户管理系统")

        # 客户列表
        self.customers = []

        # GUI 组件
        self.create_widgets()

    def create_widgets(self):
        # 顶部按钮栏
        top_frame = tk.Frame(self.root)
        top_frame.pack(side=tk.TOP, fill=tk.X)

        btn_add = tk.Button(top_frame, text="增加客户", command=self.add_customer)
        btn_add.pack(side=tk.LEFT)

        btn_edit = tk.Button(top_frame, text="修改客户", command=self.edit_customer)
        btn_edit.pack(side=tk.LEFT)

        btn_delete = tk.Button(top_frame, text="删除客户", command=self.delete_customer)
        btn_delete.pack(side=tk.LEFT)

        btn_import = tk.Button(top_frame, text="导入CSV", command=self.import_csv)
        btn_import.pack(side=tk.LEFT)

        btn_export = tk.Button(top_frame, text="导出CSV", command=self.export_csv)
        btn_export.pack(side=tk.LEFT)

        # 客户列表显示
        columns = ("ID", "Name", "Phone", "Email")
        self.tree = ttk.Treeview(self.root, columns=columns, show='headings')
        for col in columns:
            self.tree.heading(col, text=col)
        self.tree.pack(side=tk.TOP, fill=tk.BOTH, expand=True)

    def add_customer(self):
        self.edit_window(None)

    def edit_customer(self):
        selected_item = self.tree.selection()
        if selected_item:
            customer_id = self.tree.item(selected_item[0])['values'][0]
            self.edit_window(customer_id)
        else:
            messagebox.showwarning("提示", "请先选择一个客户")

    def delete_customer(self):
        selected_item = self.tree.selection()
        if selected_item:
            customer_id = self.tree.item(selected_item[0])['values'][0]
            self.customers = [c for c in self.customers if c["ID"] != customer_id]
            self.refresh_customer_list()
        else:
            messagebox.showwarning("提示", "请先选择一个客户")

    def import_csv(self):
        file_path = filedialog.askopenfilename(filetypes=[("CSV files", "*.csv")])
        if file_path:
            with open(file_path, mode='r', newline='', encoding='utf-8') as file:
                reader = csv.DictReader(file)
                self.customers = [row for row in reader]
            self.refresh_customer_list()

    def export_csv(self):
        file_path = filedialog.asksaveasfilename(defaultextension=".csv", filetypes=[("CSV files", "*.csv")])
        if file_path:
            with open(file_path, mode='w', newline='', encoding='utf-8') as file:
                fieldnames = ["ID", "Name", "Phone", "Email"]
                writer = csv.DictWriter(file, fieldnames=fieldnames)
                writer.writeheader()
                writer.writerows(self.customers)

    def refresh_customer_list(self):
        # 清空表格
        for row in self.tree.get_children():
            self.tree.delete(row)
        # 插入客户数据
        for customer in self.customers:
            self.tree.insert("", "end", values=(customer["ID"], customer["Name"], customer["Phone"], customer["Email"]))

    def edit_window(self, customer_id):
        # 创建编辑窗口
        window = tk.Toplevel(self.root)
        window.title("客户信息")

        # ID
        tk.Label(window, text="ID:").grid(row=0, column=0, padx=10, pady=5)
        id_entry = tk.Entry(window)
        id_entry.grid(row=0, column=1, padx=10, pady=5)

        # 名字
        tk.Label(window, text="姓名:").grid(row=1, column=0, padx=10, pady=5)
        name_entry = tk.Entry(window)
        name_entry.grid(row=1, column=1, padx=10, pady=5)

        # 电话
        tk.Label(window, text="电话:").grid(row=2, column=0, padx=10, pady=5)
        phone_entry = tk.Entry(window)
        phone_entry.grid(row=2, column=1, padx=10, pady=5)

        # 邮箱
        tk.Label(window, text="邮箱:").grid(row=3, column=0, padx=10, pady=5)
        email_entry = tk.Entry(window)
        email_entry.grid(row=3, column=1, padx=10, pady=5)

        if customer_id:
            print(customer_id)
            print(type(customer_id))
            for c in self.customers:
                print(c)
                if customer_id == c["ID"]:
                    customer = c
            # customer = next(c for c in self.customers if c["ID"] == customer_id)
            id_entry.insert(0, customer["ID"])
            name_entry.insert(0, customer["Name"])
            phone_entry.insert(0, customer["Phone"])
            email_entry.insert(0, customer["Email"])
            id_entry.config(state='readonly')

        def save_customer():
            customer_data = {
                "ID": int(id_entry.get()),
                "Name": name_entry.get(),
                "Phone": phone_entry.get(),
                "Email": email_entry.get()
            }
            if customer_id:
                for c in self.customers:
                    if c["ID"] == customer_id:
                        c.update(customer_data)
            else:
                print(customer_data)
                self.customers.append(customer_data)
            self.refresh_customer_list()
            window.destroy()

        # 保存按钮
        btn_save = tk.Button(window, text="保存", command=save_customer)
        btn_save.grid(row=4, column=0, columnspan=2, pady=10)


# 主程序
if __name__ == "__main__":
    root = tk.Tk()
    app = CustomerManager(root)
    root.geometry("600x400")
    root.mainloop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值