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