from tkinter import * from tkinter import ttk import tkinter as tk from tkinter import messagebox win = tk.Tk() win.title("学生管理系统") win.geometry("500x600") def add_student(): name = entry_name.get() id = entry_id.get() gender = entry_gender.get() age = entry_age.get() phone = entry_phone.get() students_info.append((name, id, gender, age, phone)) refresh_treeview() clear_entries() def delete_student(): selected_items = tree.selection() if selected_items: # 获取Treeview中选中项的索引 index = int(tree.index(selected_items[0])) # 从Treeview中删除 tree.delete(selected_items[0]) # 从全局列表中根据索引删除对应的学生信息 del students_info[index] messagebox.showinfo("成功", "学生信息已删除。") else: messagebox.showinfo("提示", "请先选择一个学生信息进行删除。") def select_student_info(event): selected_item = tree.selection() if selected_item: item_values = tree.item(selected_item[0], 'values') entry_name.delete(0, tk.END) entry_id.delete(0, tk.END) entry_gender.delete(0, tk.END) entry_age.delete(0, tk.END) entry_phone.delete(0, tk.END) entry_name.insert(0, item_values[0]) entry_id.insert(0, item_values[1]) entry_gender.insert(0, item_values[2]) entry_age.insert(0, item_values[3]) entry_phone.insert(0, item_values[4]) def modify_student(): selected_item = tree.selection() if selected_item: index = tree.index(selected_item[0]) new_name = entry_name.get() new_id = entry_id.get() new_gender = entry_gender.get() new_age = entry_age.get() new_phone = entry_phone.get() students_info[index] = (new_name, new_id, new_gender, new_age, new_phone) tree.item(selected_item[0], values=(new_name, new_id, new_gender, new_age, new_phone)) clear_entries() else: messagebox.showinfo("提示", "请先选择一个学生信息进行修改。") def refresh_treeview(): for item in tree.get_children(): tree.delete(item) for student in students_info: tree.insert('', 'end', values=student) def clear_entries(): entry_name.delete(0, tk.END) entry_id.delete(0, tk.END) entry_gender.delete(0, tk.END) entry_age.delete(0, tk.END) entry_phone.delete(0, tk.END) students_info = [] entry_name = Entry(win) entry_id = Entry(win) entry_gender = Entry(win) entry_age = Entry(win) entry_phone = Entry(win) lb1 = Label(win, text="") title = Label(win, text="学生管理系统", bg="#add8e6", font=("黑体", 14)) name_label = Label(win, text="姓名:", font=("黑体", 13)) id_label = Label(win, text="学号:", font=("黑体", 13)) gender_label = Label(win, text="性别:", font=("黑体", 13)) age_label = Label(win, text="年龄:", font=("黑体", 13)) phone_label = Label(win, text="电话:", font=("黑体", 13)) btn_add = Button(win, text="添加学生信息", command=add_student) btn_delete = Button(win, text="删除学生信息", command=delete_student) btn_modify = Button(win, text="修改学生信息", command=modify_student) btn_refresh = Button(win, text="显示学生信息", command=refresh_treeview) tree = ttk.Treeview(win, columns=('姓名', '学号', '性别', '年龄', '电话'), show='headings') tree.column('姓名', width=90, anchor=CENTER) tree.column('学号', width=90, anchor=CENTER) tree.column('性别', width=90, anchor=CENTER) tree.column('年龄', width=90, anchor=CENTER) tree.column('电话', width=90, anchor=CENTER) tree.heading('姓名', text='姓名') tree.heading('学号', text='学号') tree.heading('性别', text='性别') tree.heading('年龄', text='年龄') tree.heading('电话', text='电话') tree.bind('<ButtonRelease-1>', select_student_info) lb1.place(x=0, y=30, width=300) title.place(x=0, y=0, width=500, height=70) name_label.place(x=200, y=80, width=60) id_label.place(x=200, y=120, width=60) gender_label.place(x=200, y=160, width=60) age_label.place(x=200, y=200, width=60) phone_label.place(x=200, y=240, width=60) entry_name.place(x=260, y=83, width=180, height=20) entry_id.place(x=260, y=123, width=180, height=20) entry_gender.place(x=260, y=163, width=180, height=20) entry_age.place(x=260, y=203, width=180, height=20) entry_phone.place(x=260, y=240, width=180, height=20) btn_add.place(x=30, y=80, width=120, height=30) btn_delete.place(x=30, y=130, width=120, height=30) btn_modify.place(x=30, y=180, width=120, height=30) btn_refresh.place(x=30, y=230, width=120, height=30) tree.place(x=10, y=300, width=480, height=290) win.mainloop()
优点:
①模块化设计:通过定义多个函数(如add_student, delete_student, modify_student等),代码结构清晰,易于理解和维护。每个功能都有对应的函数处理,提高了代码的模块化程度。
②用户友好:提供了图形用户界面(GUI),使得非技术用户也能轻松操作,包括添加、删除、修改和查看学生信息。使用了messagebox来显示操作结果的反馈信息,增强了用户体验。
③数据一致性:通过全局变量students_info列表存储学生信息,确保了数据的一致性。无论是添加、删除还是修改学生信息,都会即时更新这个列表,且UI上的Treeview也会随之刷新,保持数据与显示同步。
④交互性强:利用Treeview控件和事件绑定(如<ButtonRelease-1>),实现了与用户的直接交互。用户可以直接从列表中选择学生进行操作,提升了操作的直观性和便捷性。
⑤简洁明了:尽管功能全面,但代码整体较为简洁,没有过多复杂的逻辑,这对于初学者理解Tkinter编程非常有帮助。变量命名直观,遵循了良好的编程实践。
⑥灵活性与可扩展性:虽然当前系统功能基础,但结构设计允许容易地添加更多功能或调整现有功能。例如,可以轻松增加验证输入的功能,或者增加排序、搜索学生信息的能力。
⑦资源管理:通过在最后调用win.mainloop()启动事件循环,代码能够持续监听用户操作,保证了窗口的正常运行,同时也确保了资源的有效管理,程序在关闭时会自动释放相关资源。