from tkinter import *
from tkinter.messagebox import *
from Database import Database
class StudentUI:
def __init__(self):
# 数据库的用户名和密码,从self.entry_1和self.entry_2中获得
self.user = None
self.password = None
# # 建立列表用于清除函数的参数传送
self.list_1 = []
self.root = Tk()
self.root.resizable(0, 0) # 禁止调节大小
self.screen_width = self.root.winfo_screenwidth() # 获得屏幕宽度
self.screen_height = self.root.winfo_screenheight() # 获得屏幕高度
# 容器,添加各种组件
self.frame_1 = Frame(self.root)
# # 以place的形式添加到root中
self.frame_1.place(x=0, y=0)
# 用户名和密码的文本框, show="*",防止密码泄露
self.entry_1 = Entry(self.frame_1, bd=5)
self.entry_2 = Entry(self.frame_1, bd=5, show="*")
# 学生信息管理系统主界面
def init_1(self):
# 设置窗口标题
self.root.title("学生信息管理系统")
# 设置窗口大小
self.root.geometry("800x600")
# self.root.minsize(800, 600)
# 添加菜单
menuber = Menu(self.root)
# tearoff=0是关闭第一行虚线
menu_1 = Menu(menuber, tearoff=0)
menuber.add_cascade(label="文件", menu=menu_1)
menu_2 = Menu(menuber, tearoff=0)
menuber.add_cascade(label="功能", menu=menu_2)
menu_3 = Menu(menuber, tearoff=0)
menuber.add_cascade(label="帮助", menu=menu_3)
# 添加菜单项
menu_1.add_cascade(label="另存为", command=lambda: Database.savestudent(Database, self.user, self.password))
menu_2.add_cascade(label="添加学生", command=self.addstudent)
menu_2.add_cascade(label="删除学生", command=self.deletestudent)
menu_2.add_cascade(label="修改学生", command=self.updatestudent)
menu_2.add_cascade(label="查询学生", command=self.selectstudent)
menu_2.add_cascade(label="输出学生", command=self.showallstudent)
menu_3.add_cascade(label="关于", command=self.about)
# 将菜单加入root
self.root["menu"] = menuber
# 进入事件循环
self.root.mainloop()
# 关于信息
@staticmethod
def about():
showinfo(title="关于", message="en~~~~\n好像没啥可以说的....\n告辞(00)")
# 登录界面
def login_1(self):
self.root.title("登录界面")
# 设置窗口大小
self.root.geometry("200x140+%d+%d" % (self.screen_width / 4, self.screen_height / 7))
# 在root_2中添加登录信息
label_1 = Label(self.frame_1, text="用户名:")
label_2 = Label(self.frame_1, text="密码:")
# label_3为美化界面所用
label_3 = Label(self.frame_1, text="")
label_4 = Label(self.frame_1, text="")
# 以网格布局的形式加入到root_2中
label_1.grid(row=1, column=0)
self.entry_1.grid(row=1, column=1)
label_3.grid(row=2, column=0)
label_2.grid(row=3, column=0)
self.entry_2.grid(row=3, column=1)
label_4.grid(row=4, column=0)
# 添加用户名和密码的文本框
self.list_1.append(self.entry_1)
self.list_1.append(self.entry_2)
# 添加按钮
button_1 = Button(self.frame_1, text="登录", command=lambda: self.login_2())
button_2 = Button(self.frame_1, text="清除", command=lambda: self.clearentry())
button_1.grid(row=5, column=0)
button_2.grid(row=5, column=1)
self.root.mainloop()
# 登录界面检测
def login_2(self):
# 如果用户名和密码正确
if Database.condatabase(Database, self.entry_1.get(), self.entry_2.get()):
self.user = self.entry_1.get()
self.password = self.entry_2.get()
# 消息提示
showinfo(title="提示界面", message="登录成功!!!\n欢迎使用学生信息管理系统")
# 清除登陆界面的组件
for widget in self.frame_1.winfo_children():
widget.destroy()
self.init_1()
else:
showerror(title="错误界面", message="用户名或密码错误!!!\n请重新输入!!!")
# 清除文本框内容
def clearentry(self):
for i in range(len(self.list_1)):
self.list_1[i].delete(0, 'end')
# 添加学生
def addstudent(self):
# 清空frame_1的组件,防止组件重叠
for widget in self.frame_1.winfo_children():
widget.destroy()
# 清空list_1
self.list_1.clear()
# 在容器frame中添加学生的各种信息
label_1 = Label(self.frame_1, text="学号:")
label_2 = Label(self.frame_1, text="姓名:")
label_3 = Label(self.frame_1, text="性别:")
label_4 = Label(self.frame_1, text="出生日期:")
label_5 = Label(self.frame_1, text="电话:")
label_6 = Label(self.frame_1, text="宿舍号:")
entry_1 = Entry(self.frame_1, bd=5)
entry_2 = Entry(self.frame_1, bd=5)
entry_3 = Entry(self.frame_1, bd=5)
entry_4 = Entry(self.frame_1, bd=5)
entry_5 = Entry(self.frame_1, bd=5)
entry_6 = Entry(self.frame_1, bd=5)
# 以网格布局的形式加入到frame中
label_1.grid(row=0, column=0)
entry_1.grid(row=0, column=1)
label_2.grid(row=1, column=0)
entry_2.grid(row=1, column=1)
label_3.grid(row=2, column=0)
entry_3.grid(row=2, column=1)
label_4.grid(row=3, column=0)
entry_4.grid(row=3, column=1)
label_5.grid(row=4, column=0)
entry_5.grid(row=4, column=1)
label_6.grid(row=5, column=0)
entry_6.grid(row=5, column=1)
# 将文本框添加到列表中
self.list_1.append(entry_1)
self.list_1.append(entry_2)
self.list_1.append(entry_3)
self.list_1.append(entry_4)
self.list_1.append(entry_5)
self.list_1.append(entry_6)
# 添加按钮
# tkinter要求由按钮(或者其它的插件)触发的控制器函数不能含有参数
# 若要给函数传递参数,需要在函数前添加lambda:(匿名函数)
button_1 = Button(self.frame_1, text="提交",
command=lambda: Database.addstudent(Database, self.user,
self.password, entry_1.get(), entry_2.get(),
entry_3.get(), entry_4.get(), entry_5.get(), entry_6.get()))
button_2 = Button(self.frame_1, text="清除", command=lambda: self.clearentry())
button_1.grid(row=6, column=0)
button_2.grid(row=6, column=1)
# 删除学生
def deletestudent(self):
# 清空frame_1的组件,防止组件重叠
for widget in self.frame_1.winfo_children():
widget.destroy()
# 清空list_1
self.list_1.clear()
# 在容器frame中添加学生的各种信息
label_1 = Label(self.frame_1, text="学号:")
label_1.grid(row=0, column=0)
entry_1 = Entry(self.frame_1, bd=5)
entry_1.grid(row=0, column=1)
# 将文本框加入list_1中
self.list_1.append(entry_1)
button_1 = Button(self.frame_1, text="提交",
command=lambda: Database.deletestudent(Database, self.user, self.password, entry_1.get()))
button_2 = Button(self.frame_1, text="清除",
command=lambda: self.clearentry())
button_1.grid(row=1, column=0)
button_2.grid(row=1, column=1)
# 更新学�
- 1
- 2
- 3
- 4
- 5
- 6
前往页