https://share.weiyun.com/6CdBA1Dj
#main.py
from tkinter import *
from LoginPage import *
root = Tk()
root.title('学生管理系统')
LoginPage(root)
root.mainloop()
#LoginPage.py
from tkinter import *
from tkinter.messagebox import *
from MainPage import *
from openpyxl import load_workbook
class LoginPage(object):
def __init__(self, master=None):
self.root = master #定义内部变量root
self.root.geometry('%dx%d' % (300, 180)) #设置窗口大小
self.username = StringVar()
self.password = StringVar()
self.createPage()
def createPage(self):
self.page = Frame(self.root) #创建Frame
self.page.pack()
Label(self.page).grid(row=0, stick=W)
Label(self.page, text = '用户名: ').grid(row=1, stick=W, pady=10)
Entry(self.page, textvariable=self.username).grid(row=1, column=1, stick=E)
Label(self.page, text = '密码: ').grid(row=2, stick=W, pady=10)
Entry(self.page, textvariable=self.password, show='*').grid(row=2, column=1, stick=E)
Button(self.page, text='登陆', command=self.loginCheck).grid(row=3, stick=W, pady=10)
Button(self.page, text='退出', command=self.page.quit).grid(row=3, column=1, stick=E)
def loginCheck(self):
name = self.username.get()
secret = self.password.get()
excelPath = "python/students.xlsx"
wb = load_workbook(filename = excelPath)
ws = wb["users"]
found = False
pair = False
for i in range(2,(ws.max_row)+1):
if(name == ws['A'+str(i)].value):
found=True
if (secret == ws['B'+str(i)].value):
pair = True
break
wb.close()
if (found == False):
showerror("","用户名不存在")
elif (pair == False):
tk.messagebox.showerror("","密码错误")
else:
self.page.destroy()
MainPage(self.root)
#MainPage.py
from tkinter import *
from view import * #菜单栏对应的各个子页面
class MainPage(object):
def __init__(self, master=None):
self.root = master #定义内部变量root
self.root.geometry('%dx%d' % (600, 500)) #设置窗口大小
self.createPage()
def createPage(self):
self.queryPage = QueryFrame(self.root) #设置不同的frame
self.countPage = CountFrame(self.root)
self.queryPage.pack() #默认显示数据录入界面
menubar = Menu(self.root)
menubar.add_command(label='学生管理', command = self.queryData)
menubar.add_command(label='学生成绩统计', command = self.countData)
self.root['menu'] = menubar # 设置菜单栏
def queryData(self):
self.queryPage.pack()
self.countPage.pack_forget()
def countData(self):
self.queryPage.pack_forget()
self.countPage.pack()
#view.py
from tkinter import *
from tkinter.messagebox import *
from openpyxl import load_workbook
from tkinter import ttk
import matplotlib.pyplot as plt
import matplotlib as mpl
class QueryFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master #定义内部变量root
self.sid = StringVar()
self.sclass = StringVar()
self.sname = StringVar()
self.sex = StringVar()
self.sbirthday = StringVar()
self.dataTreeview = ttk.Treeview()
self.excelPath = "python/students.xlsx"
self.createPage()
def createPage(self):
Label(self,text='信息管理',font=('宋体',15)).pack(side=TOP,fill='x')
nameItems= ('sid','sclass','sname','sex','sbirthday')
headingItems = ('学号','班级','姓名','性别','出生日期')
self.dataTreeview=ttk.Treeview(self,show='headings',column=nameItems)
for item in zip(nameItems,headingItems):
self.dataTreeview.column(item[0], width=100, anchor="center")
self.dataTreeview.heading(item[0],text=item[1])
self.dataTreeview.pack()
fr = Frame(self)
Label(fr,text='学号').grid(row=0)
Entry(fr, textvariable=self.sid).grid(row=0, column=1)
Label(fr,text='班级').grid(row=1)
Entry(fr,textvariable=self.sclass).grid(row=1, column=1)
Label(fr,text='姓名').grid(row=2)
Entry(fr, textvariable=self.sname).grid(row=2, column=1)
Label(fr,text='性别').grid(row=3)
Entry(fr, textvariable=self.sex).grid(row=3, column=1)
Label(fr,text='出生日期').grid(row=4)
Entry(fr, textvariable=self.sbirthday).grid(row=4, column=1)
fr.pack()
bottomFrame = Frame(self)
insButton=Button(bottomFrame,text="添加",command=self.add)
insButton.grid(row=0,column=0)
delButton=Button(bottomFrame,text="删除",command=self.delete)
delButton.grid(row=0,column=1)
updButton=Button(bottomFrame,text="修改",command=self.update)
updButton.grid(row=1,column=0)
selButton=Button(bottomFrame,text="查询",command=self.search)
selButton.grid(row=1,column=1)#定位式布局,即坐标
Button(bottomFrame,text="显示所有学生",command=self.show).grid(row=2)
bottomFrame.pack()
def add(self):
sid = self.sid.get()
sclass = self.sclass.get()
sname = self.sname.get()
sex = self.sex.get()
sdate = self.sbirthday.get()
wb = load_workbook(filename = self.excelPath)
ws = wb["students"]
for i in range(2,(ws.max_row)+1):
if(sid==ws['A'+str(i)].value):
Found=True
break
else:
Found = False
if(Found==True):
messagebox.showinfo("Error", "用户名已存在!")
else:
messagebox.showinfo("Success", "新记录已添加")
ws.append([sid,sclass,sname,sex,sdate])
ws.append(['1','2','3'])
print(sid)
wb.save(self.excelPath)
def update(self):
sid = self.sid.get()
sclass = self.sclass.get()
sname = self.sname.get()
sex = self.sex.get()
sdate = self.sbirthday.get()
wb = load_workbook(filename = self.excelPath)
ws = wb["students"]
editRow = 0
for i in range(2,(ws.max_row)+1):
if(sid==ws['A'+str(i)].value):
Found=True
editRow = i
break
else:
Found = False
if(Found==False):
messagebox.showinfo("Error","不存在该用户")
else:
ws['A'+str(editRow)].value = sid
ws['B'+str(editRow)].value = sclass
ws['C'+str(editRow)].value = sname
ws['D'+str(editRow)].value = sex
ws['E'+str(editRow)].value = sdate
wb.save(self.excelPath)
def delete(self):
sid = self.sid.get()
wb = load_workbook(filename = self.excelPath)
ws = wb["students"]
editRow = 0
for i in range(2,(ws.max_row)+1):
if(sid==ws['A'+str(i)].value):
Found=True
editRow = i
break
else:
Found = False
if(Found==False):
messagebox.showinfo("Error", "用户名不存在!")
else:
ws.delete_rows(editRow)
messagebox.showinfo("Success", "记录已删除")
wb.save(self.excelPath)
def search(self):
sid = self.sid.get()
wb = load_workbook(filename = self.excelPath)
ws = wb["students"]
editRow = 0
for i in range(2,(ws.max_row)+1):
if(sid==ws['A'+str(i)].value):
Found=True
editRow = i
break
else:
Found = False
if(Found==False):
messagebox.showinfo("Error", "用户名不存在!")
else:
value=[]
for cell in ws[editRow]:
value.append(cell.value)
self.dataTreeview.insert('', 0, values=value)
def show(self):
wb = load_workbook(filename = self.excelPath)
ws = wb["students"]
ws.delete_rows(0)
for row in ws.rows:
value=[]
for cell in row:
value.append(cell.value)
self.dataTreeview.insert('', 1, values=value)
class CountFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master #定义内部变量root
self.info = StringVar()
self.dataTreeview = ttk.Treeview(self)
self.createPage()
def createPage(self):
Label(self, text='统计界面').pack()
headingItems = ['课程','优','良','中','及格','不及格','总人数']
nameItems= ('sid','sclass','sname','sex','sbirthday','test1','test2')
self.dataTreeview=ttk.Treeview(self,show='headings',column=nameItems)
for item in zip(nameItems,headingItems):
self.dataTreeview.column(item[0], width=80, anchor="center")
self.dataTreeview.heading(item[0],text=item[1])
self.dataTreeview.pack()
Button(self, text='统计',command=self.cal).pack()
Button(self, text='画图', command=self.chart).pack()
def cal(self):
excelPath = "python/students.xlsx"
wb = load_workbook(filename = excelPath)
ws = wb["grade"]
ws.delete_cols(0)
for col in ws.columns:
A,B,C,D,E=0,0,0,0,0
for cell in col[1:ws.max_row]:
grade = cell.value
if (grade>90):
A = A+1
elif (grade>80):
B = B+1
elif (grade>70):
C = C+1
elif (grade>60):
D = D+1
else:
E = E+1
li = [col[0].value, A, B, C, D, E, ws.max_row-1]
self.dataTreeview.insert('', 0, values=li)
一些细节没调
还没画图功能(没看懂要画啥样的图)
读取excel的库有限制吗?
界面随便设计吗