Python编程之简单人员管理系统 (Python + Tkinter)研究学习

简单人员管理系统 (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()

功能说明

  1. 添加人员:输入姓名、年龄、性别、电话和部门信息,点击"添加"按钮将人员添加到系统。
  2. 删除人员:在列表中选中人员,点击"删除"按钮可删除该人员。
  3. 搜索功能:在搜索框中输入关键字,点击"搜索"按钮可查找匹配的人员。
  4. 双击查看:双击列表中的某一行,可以将该人员的信息显示在上方的输入框中。
  5. 数据持久化:当前版本数据存储在内存中,程序关闭后数据会丢失。如需持久化,可以添加文件存储功能。

扩展建议

  1. 添加数据保存到文件的功能(如JSON或CSV)
  2. 添加修改人员信息的功能
  3. 添加数据导出功能
  4. 添加更多字段(如邮箱、地址等)
  5. 添加用户登录和权限管理

这个简单的管理系统可以作为基础,根据实际需求进行扩展和修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十一剑的CS_DN博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值