简单人员管理系统 (Python + Tkinter)
下面是一个使用Python和Tkinter创建的简单人员管理系统。这个系统可以添加、删除、查看和搜索人员信息。
import tkinter as tk
from tkinter import messagebox, ttk
class PersonManagementSystem:
def __init__(self, root):
self.root = root
self.root.title("人员管理系统")
self.root.geometry("800x600")
# 人员数据存储
self.people = []
# 创建界面组件
self.create_widgets()
def create_widgets(self):
# 输入框框架
input_frame = tk.LabelFrame(self.root, text="人员信息", padx=10, pady=10)
input_frame.pack(padx=10, pady=10, fill="x")
# 姓名
tk.Label(input_frame, text="姓名:").grid(row=0, column=0, sticky="e")
self.name_entry = tk.Entry(input_frame, width=30)
self.name_entry.grid(row=0, column=1, padx=5, pady=5)
# 年龄
tk.Label(input_frame, text="年龄:").grid(row=1, column=0, sticky="e")
self.age_entry = tk.Entry(input_frame, width=30)
self.age_entry.grid(row=1, column=1, padx=5, pady=5)
# 性别
tk.Label(input_frame, text="性别:").grid(row=2, column=0, sticky="e")
self.gender_var = tk.StringVar()
self.gender_combobox = ttk.Combobox(input_frame, width=27, textvariable=self.gender_var)
self.gender_combobox['values'] = ('男', '女', '其他')
self.gender_combobox.grid(row=2, column=1, padx=5, pady=5)
# 电话
tk.Label(input_frame, text="电话:").grid(row=3, column=0, sticky="e")
self.phone_entry = tk.Entry(input_frame, width=30)
self.phone_entry.grid(row=3, column=1, padx=5, pady=5)
# 部门
tk.Label(input_frame, text="部门:").grid(row=4, column=0, sticky="e")
self.department_entry = tk.Entry(input_frame, width=30)
self.department_entry.grid(row=4, column=1, padx=5, pady=5)
# 按钮框架
button_frame = tk.Frame(self.root)
button_frame.pack(padx=10, pady=5, fill="x")
# 添加按钮
tk.Button(button_frame, text="添加", width=10, command=self.add_person).pack(side="left", padx=5)
# 删除按钮
tk.Button(button_frame, text="删除", width=10, command=self.delete_person).pack(side="left", padx=5)
# 清空按钮
tk.Button(button_frame, text="清空", width=10, command=self.clear_entries).pack(side="left", padx=5)
# 搜索框架
search_frame = tk.Frame(self.root)
search_frame.pack(padx=10, pady=5, fill="x")
tk.Label(search_frame, text="搜索:").pack(side="left")
self.search_entry = tk.Entry(search_frame, width=30)
self.search_entry.pack(side="left", padx=5)
tk.Button(search_frame, text="搜索", width=10, command=self.search_person).pack(side="left", padx=5)
tk.Button(search_frame, text="显示全部", width=10, command=self.display_all).pack(side="left", padx=5)
# 人员列表
list_frame = tk.LabelFrame(self.root, text="人员列表", padx=5, pady=5)
list_frame.pack(padx=10, pady=10, fill="both", expand=True)
# 创建Treeview
columns = ("ID", "姓名", "年龄", "性别", "电话", "部门")
self.tree = ttk.Treeview(list_frame, columns=columns, show="headings", selectmode="browse")
# 设置列宽和标题
self.tree.column("ID", width=50, anchor="center")
self.tree.column("姓名", width=100, anchor="center")
self.tree.column("年龄", width=50, anchor="center")
self.tree.column("性别", width=50, anchor="center")
self.tree.column("电话", width=120, anchor="center")
self.tree.column("部门", width=150, anchor="center")
for col in columns:
self.tree.heading(col, text=col)
# 添加滚动条
scrollbar = ttk.Scrollbar(list_frame, orient="vertical", command=self.tree.yview)
scrollbar.pack(side="right", fill="y")
self.tree.configure(yscrollcommand=scrollbar.set)
self.tree.pack(fill="both", expand=True)
# 绑定双击事件
self.tree.bind("<Double-1>", self.on_tree_double_click)
# 显示所有人员
self.display_all()
def add_person(self):
# 获取输入
name = self.name_entry.get().strip()
age = self.age_entry.get().strip()
gender = self.gender_var.get().strip()
phone = self.phone_entry.get().strip()
department = self.department_entry.get().strip()
# 验证输入
if not name:
messagebox.showerror("错误", "姓名不能为空!")
return
if not age.isdigit():
messagebox.showerror("错误", "年龄必须是数字!")
return
if not gender:
messagebox.showerror("错误", "请选择性别!")
return
# 添加到人员列表
person_id = len(self.people) + 1
person = {
"id": person_id,
"name": name,
"age": int(age),
"gender": gender,
"phone": phone,
"department": department
}
self.people.append(person)
# 更新显示
self.display_all()
# 清空输入框
self.clear_entries()
messagebox.showinfo("成功", "人员添加成功!")
def delete_person(self):
# 获取选中的项目
selected_item = self.tree.selection()
if not selected_item:
messagebox.showerror("错误", "请先选择要删除的人员!")
return
# 确认删除
if not messagebox.askyesno("确认", "确定要删除选中的人员吗?"):
return
# 获取选中人员的ID
item = self.tree.item(selected_item)
person_id = int(item['values'][0])
# 从列表中删除
self.people = [p for p in self.people if p['id'] != person_id]
# 更新显示
self.display_all()
messagebox.showinfo("成功", "人员删除成功!")
def search_person(self):
keyword = self.search_entry.get().strip().lower()
if not keyword:
self.display_all()
return
# 搜索匹配的人员
results = []
for person in self.people:
if (keyword in person['name'].lower() or
keyword in str(person['age']) or
keyword in person['gender'].lower() or
keyword in person['phone'].lower() or
keyword in person['department'].lower()):
results.append(person)
# 更新显示
self.update_treeview(results)
def display_all(self):
self.update_treeview(self.people)
def update_treeview(self, people_list):
# 清空当前显示
for item in self.tree.get_children():
self.tree.delete(item)
# 按ID排序
sorted_people = sorted(people_list, key=lambda x: x['id'])
# 添加新数据
for person in sorted_people:
self.tree.insert("", "end", values=(
person['id'],
person['name'],
person['age'],
person['gender'],
person['phone'],
person['department']
))
def clear_entries(self):
self.name_entry.delete(0, "end")
self.age_entry.delete(0, "end")
self.gender_var.set('')
self.phone_entry.delete(0, "end")
self.department_entry.delete(0, "end")
def on_tree_double_click(self, event):
# 获取选中的项目
selected_item = self.tree.selection()
if not selected_item:
return
# 获取人员信息
item = self.tree.item(selected_item)
values = item['values']
# 填充到输入框
self.clear_entries()
self.name_entry.insert(0, values[1])
self.age_entry.insert(0, values[2])
self.gender_var.set(values[3])
self.phone_entry.insert(0, values[4])
self.department_entry.insert(0, values[5])
if __name__ == "__main__":
root = tk.Tk()
app = PersonManagementSystem(root)
root.mainloop()
功能说明
- 添加人员:输入姓名、年龄、性别、电话和部门信息,点击"添加"按钮将人员添加到系统。
- 删除人员:在列表中选中人员,点击"删除"按钮可删除该人员。
- 搜索功能:在搜索框中输入关键字,点击"搜索"按钮可查找匹配的人员。
- 双击查看:双击列表中的某一行,可以将该人员的信息显示在上方的输入框中。
- 数据持久化:当前版本数据存储在内存中,程序关闭后数据会丢失。如需持久化,可以添加文件存储功能。
扩展建议
- 添加数据保存到文件的功能(如JSON或CSV)
- 添加修改人员信息的功能
- 添加数据导出功能
- 添加更多字段(如邮箱、地址等)
- 添加用户登录和权限管理
这个简单的管理系统可以作为基础,根据实际需求进行扩展和修改。