139 lines
4.7 KiB
Python
139 lines
4.7 KiB
Python
|
import tkinter as tk
|
||
|
import ttkbootstrap as ttk
|
||
|
import functions as fc
|
||
|
import main
|
||
|
|
||
|
|
||
|
class StudentManagementGUI:
|
||
|
def __init__(self, root):
|
||
|
global screen_height, screen_width, root_width, root_height, add_width, add_height
|
||
|
self.root = root
|
||
|
self.root.title("学生管理系统")
|
||
|
screen_width = root.winfo_screenwidth()
|
||
|
screen_height = root.winfo_screenheight()
|
||
|
root_width = 600
|
||
|
root_height = 500
|
||
|
add_width = 400
|
||
|
add_height = 150
|
||
|
self.root.geometry(
|
||
|
f"{root_width}x{root_height}+{int((screen_width-root_width)/2)}+{int((screen_height-root_height)/2)}"
|
||
|
)
|
||
|
# Student List Label
|
||
|
self.list_label = ttk.Label(root, text="学生列表:")
|
||
|
self.list_label.pack()
|
||
|
# Frame for student list
|
||
|
self.list_box = tk.Listbox(root)
|
||
|
self.list_box.pack(pady=10, fill=tk.BOTH, expand=False)
|
||
|
|
||
|
# Buttons Frame
|
||
|
self.buttons_frame = ttk.Frame(root)
|
||
|
self.buttons_frame.pack(pady=10)
|
||
|
# “添加学生”按钮
|
||
|
self.add_button = ttk.Button(
|
||
|
self.buttons_frame, text="添加学生", command=self.add_student
|
||
|
)
|
||
|
self.add_button.grid(row=0, column=0, padx=5)
|
||
|
|
||
|
# “删除学生”按钮
|
||
|
self.del_button = ttk.Button(
|
||
|
self.buttons_frame, text="删除学生", command=self.del_student
|
||
|
)
|
||
|
self.del_button.grid(row=0, column=1, padx=5)
|
||
|
|
||
|
# Find Student Button
|
||
|
# self.find_button = ttk.Button(
|
||
|
# self.buttons_frame, text="查找学生", command=self.find_student
|
||
|
# )
|
||
|
# self.find_button.grid(row=0, column=2, padx=5)
|
||
|
|
||
|
# “保存并退出”按钮
|
||
|
self.save_quit_button = ttk.Button(
|
||
|
self.root, text="保存并退出", command=self.save_and_quit
|
||
|
)
|
||
|
self.save_quit_button.pack()
|
||
|
|
||
|
# 导入学生数据
|
||
|
main._load_data()
|
||
|
fc.share_lists(main.stu_names_list, main.stu_info_list) # 向模块传递列表
|
||
|
self.update_student_list()
|
||
|
|
||
|
def add_student(self):
|
||
|
def add():
|
||
|
name = name_var.get()
|
||
|
gender = gender_var.get()
|
||
|
fc.add_student(name, gender)
|
||
|
self.update_student_list()
|
||
|
window.destroy()
|
||
|
|
||
|
window = ttk.Toplevel()
|
||
|
window.title("添加学生")
|
||
|
window.geometry(
|
||
|
f"{add_width}x{add_height}+{int((screen_width-add_width)/2)}+{int((screen_height-add_height)/2)}"
|
||
|
)
|
||
|
window.resizable(0, 0)
|
||
|
name_var = ttk.StringVar(window)
|
||
|
gender_var = ttk.StringVar(window)
|
||
|
label1 = ttk.Label(window, text="学生姓名:")
|
||
|
entry1 = ttk.Entry(window, textvariable=name_var)
|
||
|
button1 = ttk.Button(window, text="添加", command=add)
|
||
|
c1 = ttk.Checkbutton(
|
||
|
window, width=4, variable=gender_var, onvalue="男", text="男"
|
||
|
)
|
||
|
c2 = ttk.Checkbutton(
|
||
|
window, width=4, variable=gender_var, onvalue="女", text="女"
|
||
|
)
|
||
|
label1.grid(row=1, column=1)
|
||
|
entry1.grid(row=1, column=2, pady=10)
|
||
|
c1.place(x=150, y=60)
|
||
|
c2.place(x=250, y=60)
|
||
|
button1.grid(row=2, column=1)
|
||
|
window.mainloop()
|
||
|
|
||
|
def del_student(self):
|
||
|
stu_name = main.stu_names_list[self.list_box.index("active")]
|
||
|
stu_info = main.stu_info_list[self.list_box.index("active")]
|
||
|
|
||
|
def _del():
|
||
|
fc.delete_student(stu_info, stu_name)
|
||
|
window.destroy()
|
||
|
self.update_student_list()
|
||
|
|
||
|
window = ttk.Toplevel()
|
||
|
label = ttk.Label(window, text=f"确定要删除{stu_name}吗?")
|
||
|
button = ttk.Button(window, text="确定", command=_del)
|
||
|
label.pack()
|
||
|
button.pack()
|
||
|
window.mainloop()
|
||
|
|
||
|
# def find_student(self):
|
||
|
# window = ttk.Toplevel()
|
||
|
# str_var = ttk.StringVar(window)
|
||
|
# l1 = ttk.Label(window,text="要查找的学生姓名:")
|
||
|
# e1 = ttk.Entry(window,textvariable=str_var)
|
||
|
# window.mainloop()
|
||
|
|
||
|
def save_and_quit(self):
|
||
|
main._save_data()
|
||
|
self.root.destroy()
|
||
|
|
||
|
def update_student_list(self):
|
||
|
self.list_box.delete(0, tk.END)
|
||
|
if main.stu_info_list:
|
||
|
for stu_info in main.stu_info_list:
|
||
|
self.list_box.insert(tk.END, str(stu_info))
|
||
|
else:
|
||
|
self.list_box.insert(tk.END, "无学生")
|
||
|
|
||
|
# self.list_text.delete(1.0, tk.END)
|
||
|
# if main.stu_info_list:
|
||
|
# for stu_info in main.stu_info_list:
|
||
|
# self.list_text.insert(tk.END, str(stu_info) + "\n")
|
||
|
# else:
|
||
|
# self.list_text.insert(tk.END, "无学生")
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
root = ttk.Window(themename="darkly")
|
||
|
app = StudentManagementGUI(root)
|
||
|
root.mainloop()
|