使用Python的Tkinter库实现学生信息管理

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()启动事件循环,代码能够持续监听用户操作,保证了窗口的正常运行,同时也确保了资源的有效管理,程序在关闭时会自动释放相关资源。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值