首先说一下设计思路,我们是要实现一个学生管理信息管理系统 ,那么开始得有一个登陆界面窗口,我们输入系统内保存的账号密码信息之后,点击登陆按钮后便可以成功进入学生信息管理系统主窗口,那么我们还要再创建一个学生信息管理主窗口,在主窗口里面写我们要想要实现的功能。
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import random
from PIL import Image,ImageTk
#创建主窗口
def MainTest():
root=Tk()
root.title("学生管理系统")
root.geometry("700x500")
LoginSystem(master=root)
root.mainloop()
#创建学生管理系统窗口
def MainTest2():
root2=Tk()
root2.title("学生管理系统")
root2.geometry("700x500")
MainSystem(master1=root2)
root2.mainloop()
#添加学生信息窗口
def MainTest3():
root3=Tk()
root3.title("添加学生信息")
root3.geometry("700x400")
ADdName(master2=root3)
root3.mainloop()
#查看学生信息窗口
def MainTest4():
root4=Tk()
root4.title("查看学生信息")
root4.geometry("700x400")
searchName(master3=root4)
root4.mainloop()
#显示学生信息窗口
def MainTest5():
root5=Tk()
root5.title("查看学生信息")
root5.geometry("700x500")
ShowName(master4=root5)
root5.mainloop()
#登陆主窗口
class LoginSystem(Frame):
def __init__(self,master=None):
super().__init__(master)
#用于接收enter输入的数据变量,相当于存储器
self.username=StringVar()
self.password=StringVar()
self.pack()
self.creatwidget()
def creatwidget(self):
#创建画布
self.canvas=Canvas(self.master,height=500,width=700)
#im_root=self.get_image("tk图片.jpg",1202,676)
#self.canvas.create_image(1202,676,im_root)
self.canvas.pack()
#注意在程序代码中,grid和place可用共用,但是前2则不可与pack在同一代码中共存出现。
#创建3个Label控件,并设置标题,字体和位置 font也可以用汉字形式设置,bold是加粗的意思
self.label1=Label(self.master,text="学生管理系统登陆界面",font=('宋体 16 bold'))
self.label1.place(x=220,y=20)
self.label2=Label(self.master,text="用户名",font=('宋体 10 bold'))
self.label2.place(x=230,y=190)
self.entry1=Entry(self.master,textvariable=self.username)
self.entry1.place(x=320,y=190)
self.label3=Label(self.master,text="密码",font=('宋体 10 bold'))
self.label3.place(x=230,y=250)
self.entry2=Entry(self.master,textvariable=self.password,show="*")
self.entry2.place(x=320,y=250)
#创建两个Button按钮,并绑定对应的函数事件,登陆函数和退出函数
self.button1=Button(self.master,text="确认",font=('宋体 10 bold'),command=self.login)
self.button1.place(x=270,y=400)
self.button2=Button(self.master,text="退出",font=('宋体 10 bold'),command=self.exit)
self.button2.place(x=380,y=400)
#登陆函数,如果用户名和密码正确,则进入下一个窗口,如果用户名和密码错误,则做出相对提示
def login(self):
if self.entry1.get() == "1" and self.entry2.get() == "1":
self.mainSystem()
elif self.entry1.get() != "1":
messagebox.showwarning("错误提示","用户名错误")
else:
messagebox.showwarning("错误提示","密码错误")
#退出函数
def exit(self):
self.master.destroy()
def mainSystem(self):
self.master.destroy()
MainTest2()
'''
#打开指定的图片文件,缩放至指定尺寸
def get_image(self,filename,width,height):
im=Image.open(filename).resize((width,height))
return ImageTk.PhotoImage(im)
'''
#学生管理主界面
class MainSystem(Frame):
def __init__(self,master1=None):
super().__init__(master1)
self.master=master1
self.pack()
self.creatwidget()
def creatwidget(self):
self.lable1=Label(self.master,text="欢迎使用学生管理系统",font=('宋体 20 bold'))
self.lable1.place(x=200,y=20)
#点击添加学生信息控件,绑定到添加信息的函数
self.button1=Button(self.master,text="添加学生信息",font=('宋体 14 bold'),command=self.addName)
self.button1.place(x=260,y=100)
self.button2=Button(self.master,text="查看学生信息",font=('宋体 14 bold'),command=self.searchName)
self.button2.place(x=260,y=150)
self.button3=Button(self.master,text="显示学生信息",font=('宋体 14 bold'),command=self.showName)
self.button3.place(x=260,y=200)
#点击退出当前系统并销毁当前界面,返回登陆界面
self.button4=Button(self.master,text="退出当前系统",font=('宋体 14 bold'),command=lambda :[self.master.destroy(),MainTest2()])
self.button4.place(x=260,y=250)
#显示版本信息
self.label2=Label(self.master,text="ZSL V1.0版本",font=('宋体 16 bold'))
self.label2.place(x=200,y=400)
def addName(self):
self.master.destroy()
MainTest3()
def searchName(self):
self.master.destroy()
MainTest4()
def showName(self):
self.master.destroy()
MainTest5()
class ADdName(Frame):
def __init__(self,master2=None):
super().__init__(master2)
self.master=master2
self.addnum=StringVar()
self.addname=StringVar()
self.addphone=StringVar()
self.pack()
global lists
self.creatwidget()
def creatwidget(self):
self.canves=Canvas(self.master,width=500,height=300)
self.canves.pack()
self.label1=Label(self.master,text="添加学号",font=('宋体 18 bold'))
self.label1.place(x=8,y=20)
self.entry1=Entry(self.master,textvariable=self.addnum,width=20)
self.entry1.place(x=200,y=20)
self.label2=Label(self.master,text="添加姓名",font=('宋体 18 bold'))
self.label2.place(x=8,y=80)
self.entry2=Entry(self.master,textvariable=self.addname,width=20)
self.entry2.place(x=200,y=80)
self.label3=Label(self.master,text="添加电话",font=('宋体 18 bold'))
self.label3.place(x=8,y=140)
self.entry3=Entry(self.master,textvariable=self.addphone,width=20)
self.entry3.place(x=200,y=140)
#绑定事件,保存输入学生的信息
self.button=Button(self.master,text="保存",font=('宋体 14 bold'),command=self.saveName)
self.button.place(x=80,y=220)
#绑定事件,返回上一级菜单并且销毁当前界面
self.button1=Button(self.master,text="返回",font=('宋体 14 bold'),command=lambda :[self.master.destroy(),MainTest2()])
self.button1.place(x=200,y=220)
#绑定事件退出系统
self.button2=Button(self.master,text="退出",font=('宋体 14 bold'),command=self.exitsystem)
self.button2.place(x=320,y=220)
#保存学生信息事件函数
def saveName(self):
number=self.entry1.get()
name=self.entry2.get()
phone=self.entry3.get()
lists= []
xinxi = {}
xinxi={'学号':number,'姓名':name,'电话':phone}
lists.append(xinxi)
'''
with open("学生信息.txt","r",encoding="utf-8") as f:
lst=f.readlines()
for i in lst:
b=eval(i)
if number ==b["学号"]:
messagebox.showerror("信息存在","学生信息已存在,请重新添加")
return
'''
for datas in lists:
xy = str(datas)+ "\n"
f = open('学生信息.txt','a',encoding="utf-8")
f.write(xy)
f.close()
messagebox.showinfo("保存成功","已成功保存学生信息")
#当数据保存成功,把输入框内的数据清除。
self.entry1.delete(0,END)
self.entry2.delete(0,END)
self.entry3.delete(0,END)
def exitsystem(self):
self.master.destroy()
#创建窗口学生信息窗口
class searchName(Frame):
def __init__(self,master3=None):
super().__init__(master3)
self.master=master3
self.inpunmber=StringVar()
self.shownum=StringVar()
self.showname=StringVar()
self.showphone=StringVar()
self.pack()
global lists
self.creatwiget()
def creatwiget(self):
self.label1=Label(self.master,text="查找信息",font=('宋体 18 bold'))
self.label1.place(x=8,y=20)
self.entry1=Entry(self.master,textvariable=self.inpunmber,width=20)
self.entry1.place(x=200,y=20)
self.label2=Label(self.master,text="学生学号",font=('宋体 18 bold'))
self.label2.place(x=8,y=80)
self.entry2=Entry(self.master,textvariable=self.shownum,width=20)
self.entry2.place(x=200,y=80)
self.label3=Label(self.master,text="学生姓名",font=('宋体 18 bold'))
self.label3.place(x=8,y=140)
self.entry3=Entry(self.master,textvariable=self.showname,width=20)
self.entry3.place(x=200,y=140)
self.label4=Label(self.master,text="学生电话",font=('宋体 18 bold'))
self.label4.place(x=8,y=200)
self.entry4=Entry(self.master,textvariable=self.showphone,width=20)
self.entry4.place(x=200,y=200)
self.button1=Button(self.master,text="确定",command=self.searchDate,font=('宋体 14 bold'))
self.button1.place(x=100,y=280)
self.button2=Button(self.master,text="修改",command=self.moveDate,font=('宋体 14 bold'))
self.button2.place(x=180,y=280)
self.button3=Button(self.master,text="删除",command=self.removeDate,font=('宋体 14 bold'))
self.button3.place(x=260,y=280)
self.button4=Button(self.master,text="返回",command=lambda :[self.master.destroy(),MainTest2()],font=('宋体 14 bold'))
self.button4.place(x=340,y=280)
self.button5=Button(self.master,text="退出",command=self.exit,font=('宋体 14 bold'))
self.button5.place(x=420,y=280)
#查询信息,根据enter1 中输入的信息,判断数据是否在列表当中,如果在则返回对应数据
def searchDate(self):
data = self.entry1.get()
with open("学生信息.txt","r",encoding="utf-8") as f:
lst = f.readlines()
for i in lst:
b = eval(i) #将列表转换为字典
if data == b["学号"] or data == b["姓名"] or data == b["电话"]:
a = b["学号"]
c = b["姓名"]
d = b["电话"]
self.entry2.delete(0,END)
#将数据返回到entry里,显示出来
self.entry2.insert(20,a)
self.entry3.delete(0,END)
self.entry3.insert(20,c)
self.entry4.delete(0,END)
self.entry4.insert(20,d)
def moveDate(self):
pass
def removeDate(self):
pass
def exit(self):
self.master.destroy()
class ShowName(Frame):
def __init__(self,master4=None):
super().__init__(master4)
self.master=master4
self.pack()
self.creatwidget()
def creatwidget(self):
self.button1=Button(self.master,text="返回",font=('宋体 14 bold'),command=lambda :[self.master.destroy(),MainTest2()])
self.button1.place(x=200,y=450)
self.button2=Button(self.master,text="退出",font=('宋体 14 bold'),command=self.exit)
self.button2.place(x=400,y=450)
#显示学生数据
colunms = ("学号","姓名","电话")
treeview = ttk.Treeview(self.master,height=18,show="headings",columns=colunms)
#表示列,不显示
treeview.column("学号",width=100,anchor='center')
treeview.column("姓名",width=300,anchor='center')
treeview.column("电话",width=300,anchor='center')
#显示表头
treeview.heading("学号",text="学号")
treeview.heading("姓名",text="姓名")
treeview.heading("电话",text="电话")
treeview.pack(side=LEFT,fill=BOTH)
number = []
namedata = []
phone = []
with open("学生信息.txt", "r",encoding="utf-8") as f:
lst = f.readlines()
for i in range(len(lst)):
j = eval(lst[i])
num = j["学号"]
name = j["姓名"]
phn = j["电话"]
number.append(num)
namedata.append(name)
phone.append(phn)
for i in range(len(lst)):
treeview.insert('',i,values=(number[i],namedata[i],phone[i]))
def exit(self):
self.master.destroy()
if __name__ == "__main__":
MainTest()
#MainTest2()
#MainTest3()
#MainTest4()
#MainTest5()
#MainSystem()
LoginSystem()
#ADdName()
使用str()函数,可以将非字符串类型转换成字符串;