python基于Tkinter怎么实现人员管理系统
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,小编给大家分享一下python基于Tkinter怎么实现人员管理系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言Tkinter是python内置的标准GUI库,基于Tkinte
千家信息网最后更新 2024年09月21日python基于Tkinter怎么实现人员管理系统
小编给大家分享一下python基于Tkinter怎么实现人员管理系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
前言
Tkinter是python内置的标准GUI库,基于Tkinter实现了简易人员管理系统,所用数据库为Mongodb
代码
时间宝贵!直接上代码!
from tkinter import *from tkinter.messagebox import *from tkinter import ttkimport pymongoimport tkinter as tkimport reimport timeimport datetimeimport pandas as pdfrom tkinter import filedialogfrom PIL import ImageTk,Imageimport tkinter#连接数据库client = pymongo.MongoClient(host="localhost", port=27017)db = client.syscol = db.user#创建窗口root = Tk()root.geometry('900x700')root.title('人员管理系统')#表头img =Image.open(r'C:\Users\apple\Desktop\image.jpg')img = img.resize((900,68),Image.ANTIALIAS)img = ImageTk.PhotoImage(img)top=Label(root, text='人员管理系统',image=img,fg='black',font=('楷体', 20),compound='center', bitmap='error')top.pack(ipady=0,side=TOP, fill='x')#变量sid = StringVar()name = StringVar()age = StringVar()salary = StringVar()phone = StringVar()birthday = StringVar()#控制函数def add(): global info info=Toplevel() info.title("添加信息") info.geometry('400x400') button1=Button(info, text="确认",command=appendInfo,font=("黑体", 12)).place(relx=0.4, rely=0.8, width=100) Label(info, text="工号:").place(relx=0.2, rely=0.1, relwidth=0.1) Label(info, text="姓名:").place(relx=0.2, rely=0.2, relwidth=0.1) Label(info, text="年龄:").place(relx=0.2, rely=0.3, relwidth=0.1) Label(info, text="薪资:").place(relx=0.2, rely=0.4, relwidth=0.1) Label(info, text="电话:").place(relx=0.2, rely=0.5, relwidth=0.1) Label(info, text="生日:").place(relx=0.2, rely=0.6, relwidth=0.1) text1=Entry(info, textvariable=sid).place(relx=0.3, rely=0.1, relwidth=0.45, height=25) sid.set("") text2=Entry(info, textvariable=name).place(relx=0.3, rely=0.2, relwidth=0.45, height=25) name.set("") text3=Entry(info, textvariable=age).place(relx=0.3, rely=0.3, relwidth=0.45, height=25) age.set("") text4=Entry(info, textvariable=salary).place(relx=0.3, rely=0.4, relwidth=0.45, height=25) salary.set("") text5=Entry(info, textvariable=phone).place(relx=0.3, rely=0.5, relwidth=0.45, height=25) phone.set("") text6=Entry(info, textvariable=birthday).place(relx=0.3, rely=0.6, relwidth=0.45, height=25) birthday.set("") info.bind('',pas8)# info.bind_all(' ',movetriangle)# info.bind_all(' ',movetriangle)# info.bind_all(' ',movetriangle)# .bind_all(' ',movetriangle) def pitch_on(): global info info=Toplevel() info.title("删除信息") info.geometry('400x400') Label(info, text="是否确定删除以下信息",font=('楷体', 15)).place(relx=0.2, rely=0.01, relwidth=0.6) Label(info, text="工号:").place(relx=0.2, rely=0.1, relwidth=0.1) Label(info, text="姓名:").place(relx=0.2, rely=0.2, relwidth=0.1) Label(info, text="年龄:").place(relx=0.2, rely=0.3, relwidth=0.1) Label(info, text="薪资:").place(relx=0.2, rely=0.4, relwidth=0.1) Label(info, text="电话:").place(relx=0.2, rely=0.5, relwidth=0.1) Label(info, text="生日:").place(relx=0.2, rely=0.6, relwidth=0.1) text1=Entry(info, textvariable=sid,state='disable').place(relx=0.3, rely=0.1, relwidth=0.45, height=25) sid.set(sf[0]) text2=Entry(info, textvariable=name,state='disable').place(relx=0.3, rely=0.2, relwidth=0.45, height=25) name.set(sf[1]) text3=Entry(info, textvariable=age,state='disable').place(relx=0.3, rely=0.3, relwidth=0.45, height=25) age.set(sf[2]) text4=Entry(info, textvariable=salary,state='disable').place(relx=0.3, rely=0.4, relwidth=0.45, height=25) salary.set(sf[3]) text5=Entry(info, textvariable=phone,state='disable').place(relx=0.3, rely=0.5, relwidth=0.45, height=25) phone.set(sf[4]) text6=Entry(info, textvariable=birthday,state='disable').place(relx=0.3, rely=0.6, relwidth=0.45, height=25) birthday.set(sf[5]) button1=Button(info, text="确认",command=deleteInfo).place(relx=0.2, rely=0.8, width=100) button2=Button(info, text="关闭",command=des).place(relx=0.6, rely=0.8, width=100) info.bind(' ',pas33) def information2(): global info info=Toplevel() info.title("详细信息") info.geometry('400x400') button1=Button(info, text="更新信息",command=updateInfo).place(relx=0.4, rely=0.8, width=100) Label(info, text="工号:").place(relx=0.2, rely=0.1, relwidth=0.1) Label(info, text="姓名:").place(relx=0.2, rely=0.2, relwidth=0.1) Label(info, text="年龄:").place(relx=0.2, rely=0.3, relwidth=0.1) Label(info, text="薪资:").place(relx=0.2, rely=0.4, relwidth=0.1) Label(info, text="电话:").place(relx=0.2, rely=0.5, relwidth=0.1) Label(info, text="生日:").place(relx=0.2, rely=0.6, relwidth=0.1) text1=Entry(info, textvariable=sid,state='disable').place(relx=0.3, rely=0.1, relwidth=0.45, height=25) sid.set(sf[0]) text2=Entry(info, textvariable=name).place(relx=0.3, rely=0.2, relwidth=0.45, height=25) name.set(sf[1]) text3=Entry(info, textvariable=age).place(relx=0.3, rely=0.3, relwidth=0.45, height=25) age.set(sf[2]) text4=Entry(info, textvariable=salary).place(relx=0.3, rely=0.4, relwidth=0.45, height=25) salary.set(sf[3]) text5=Entry(info, textvariable=phone).place(relx=0.3, rely=0.5, relwidth=0.45, height=25) phone.set(sf[4]) text6=Entry(info, textvariable=birthday).place(relx=0.3, rely=0.6, relwidth=0.45, height=25) birthday.set(sf[5]) info.bind(' ',pas11) def des(): info.destroy() def information(event): item=dataTreeview.selection() itemvalues=dataTreeview.item(item,'values') global info info=Toplevel() info.title("详细信息") info.geometry('400x400') button1=Button(info, text="更新信息",command=updateInfo).place(relx=0.4, rely=0.8, width=100) Label(info, text="工号:").place(relx=0.2, rely=0.1, relwidth=0.1) Label(info, text="姓名:").place(relx=0.2, rely=0.2, relwidth=0.1) Label(info, text="年龄:").place(relx=0.2, rely=0.3, relwidth=0.1) Label(info, text="薪资:").place(relx=0.2, rely=0.4, relwidth=0.1) Label(info, text="电话:").place(relx=0.2, rely=0.5, relwidth=0.1) Label(info, text="生日:").place(relx=0.2, rely=0.6, relwidth=0.1) text1=Entry(info, textvariable=sid,state='disable').place(relx=0.3, rely=0.1, relwidth=0.45, height=25) sid.set(itemvalues[0]) text2=Entry(info, textvariable=name).place(relx=0.3, rely=0.2, relwidth=0.45, height=25) name.set(itemvalues[1]) text3=Entry(info, textvariable=age).place(relx=0.3, rely=0.3, relwidth=0.45, height=25) age.set(itemvalues[2]) text4=Entry(info, textvariable=salary).place(relx=0.3, rely=0.4, relwidth=0.45, height=25) salary.set(itemvalues[3]) text5=Entry(info, textvariable=phone).place(relx=0.3, rely=0.5, relwidth=0.45, height=25) phone.set(itemvalues[4]) text6=Entry(info, textvariable=birthday).place(relx=0.3, rely=0.6, relwidth=0.45, height=25) birthday.set(itemvalues[5]) def isVaildDate(date): try: time.strptime(date, "%Y-%m-%d") return True except: return False def showAllInfo(): x = dataTreeview.get_children() for item in x: dataTreeview.delete(item) lst=col.find({},{'_id':0}) for item in lst: i=list(item.values()) dataTreeview.insert("", 1, text="line1", values=i)def pas1(self): showAllInfo() def pas2(self): add() def pas3(self): pitch_on()def pas33(self): deleteInfo() def pas4(self): information2() def pas5(self): searchInfo()def pas55(self): search() def pas6(self): impInfo() def pas7(self): exp() def pas8(self): appendInfo() def pas9(self): global sf sf=dataTreeview.selection() sf=dataTreeview.item(sf,'values') def pas10(self): expInfo() def pas11(self): updateInfo() def appendInfo(): flag=1 if sid.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if sid.get().isdigit() == False: showerror(title='提示', message='格式错误') sid.set("") flag=0 if name.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if age.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if age.get().isdigit() == False: showerror(title='提示', message='格式错误') age.set("") flag=0 if salary.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if salary.get().isdigit() == False: showerror(title='提示', message='格式错误') salary.set("") flag=0 if phone.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if phone.get().isdigit() == False: showerror(title='提示', message='格式错误') phone.set("") flag=0 if birthday.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if isVaildDate(str(birthday.get())) == False: showerror(title='提示', message='格式错误') birthday.set("") flag=0 if flag==1: x = dataTreeview.get_children() for item in x: dataTreeview.delete(item) list1 = { "work_number":sid.get(), "name":name.get(), "age":age.get(), "salary":salary.get(), "phone":phone.get(), "birthday":birthday.get() } col.insert_one(list1) lst=col.find({},{'_id':0}) for item in lst: i=list(item.values()) dataTreeview.insert("", 1, text="line1", values=i) info.destroy()def deleteInfo(): lst=list(col.find({},{'_id':0})) num = sid.get() flag = 0 for i in range(len(lst)): if str(num)==str(lst[i].get("work_number")): flag = 1 col.delete_one({'work_number':num}) break x = dataTreeview.get_children() for item in x: dataTreeview.delete(item) lst=col.find({},{'_id':0}) for item in lst: i=list(item.values()) dataTreeview.insert("", 1, text="line1", values=i) info.destroy() #更新操作def updateInfo(): sid_1 = sid.get() name_1 = name.get() age_1 = age.get() salary_1 = salary.get() phone_1 = phone.get() birthday_1 = birthday.get() flag=1 if sid.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if sid.get().isdigit() == False: showerror(title='提示', message='格式错误') sid.set("") flag=0 if name.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if age.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if age.get().isdigit() == False: showerror(title='提示', message='格式错误') age.set("") flag=0 if salary.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if salary.get().isdigit() == False: showerror(title='提示', message='格式错误') salary.set("") flag=0 if phone.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if phone.get().isdigit() == False: showerror(title='提示', message='格式错误') phone.set("") flag=0 if birthday.get() == "": showerror(title='提示', message='输入不能为空') flag=0 if isVaildDate(str(birthday.get())) == False: showerror(title='提示', message='格式错误') birthday.set("") flag=0 if flag==1: up={ "work_number":sid_1, "name":name_1, "age":age_1, "salary":salary_1, "phone":phone_1, "birthday":birthday_1 } old=col.find_one({'work_number': sid_1},{"_id": 0}) col.update_one(old, {'$set':up}) x = dataTreeview.get_children() for item in x: dataTreeview.delete(item) lst=col.find({},{'_id':0}) for item in lst: i=list(item.values()) dataTreeview.insert("", 1, text="line1", values=i) showinfo(title='提示', message='更新成功!') des() #搜索页面def search(): global info info=Toplevel() info.title("搜索信息") info.geometry('400x400') button1=Button(info, text="确认搜索",command=searchInfo).place(relx=0.4, rely=0.8, width=100) Label(info, text="工号:").place(relx=0.2, rely=0.1, relwidth=0.1) Label(info, text="姓名:").place(relx=0.2, rely=0.2, relwidth=0.1) Label(info, text="年龄:").place(relx=0.2, rely=0.3, relwidth=0.1) Label(info, text="薪资:").place(relx=0.2, rely=0.4, relwidth=0.1) Label(info, text="电话:").place(relx=0.2, rely=0.5, relwidth=0.1) Label(info, text="生日:").place(relx=0.2, rely=0.6, relwidth=0.1) text1=Entry(info, textvariable=sid).place(relx=0.3, rely=0.1, relwidth=0.45, height=25) sid.set("") text2=Entry(info, textvariable=name).place(relx=0.3, rely=0.2, relwidth=0.45, height=25) name.set("") text3=Entry(info, textvariable=age).place(relx=0.3, rely=0.3, relwidth=0.45, height=25) age.set("") text4=Entry(info, textvariable=salary).place(relx=0.3, rely=0.4, relwidth=0.45, height=25) salary.set("") text5=Entry(info, textvariable=phone).place(relx=0.3, rely=0.5, relwidth=0.45, height=25) phone.set("") text6=Entry(info, textvariable=birthday).place(relx=0.3, rely=0.6, relwidth=0.45, height=25) birthday.set("") info.bind(' ',pas5)#搜索操作 def searchInfo(): lst=list(col.find({},{'_id':0})) sid_1 = sid.get() name_1 = name.get() age_1 = age.get() salary_1 = salary.get() phone_1 = phone.get() birthday_1 = birthday.get() flag=1# if sid.get().isdigit() == False:# # showerror(title='提示', message='格式错误')# sid.set("")# flag=0# if age.get().isdigit() == False:# # showerror(title='提示', message='格式错误')# age.set("")# flag=0# if salary.get().isdigit() == False:# # showerror(title='提示', message='格式错误')# salary.set("")# flag=0 # if phone.get().isdigit() == False:# # showerror(title='提示', message='格式错误')# phone.set("")# flag=0# if isVaildDate(str(birthday.get())) == False:# # showerror(title='提示', message='格式错误')# birthday.set("")# flag=0# if flag==0:# showerror(title='提示', message='格式错误') if flag==1: fla = 0 v=[] for i in range(len(lst)): if sid_1==str(lst[i].get("work_number")): fla = 1 v.append(lst[i].values()) continue elif name_1==lst[i].get("name"): fla = 1 v.append(lst[i].values()) continue elif age_1==lst[i].get("age"): fla = 1 v.append(lst[i].values()) continue elif salary_1==lst[i].get("salary"): fla= 1 v.append(lst[i].values()) continue elif phone_1==lst[i].get("phone"): fla = 1 v.append(lst[i].values()) continue elif birthday_1==lst[i].get("birthday"): fla= 1 v.append(lst[i].values()) continue if fla == 0: showerror(title='提示', message='无此信息,搜索失败!') x = dataTreeview.get_children() for item in x: dataTreeview.delete(item) for i in v: dataTreeview.insert("", 1, text="line1", values=list(i)) des() def impInfo(): root1 = Tk() root1.withdraw() Folderpath = filedialog.askdirectory() #获得选择好的文件夹 Filepath = filedialog.askopenfilename() #获得选择好的文件 data=pd.read_csv(Filepath) for i in range(len(data.values)): j=list(data.values[i]) lst=col.find({},{'_id':0}) flag=0 for item in lst: i=list(item.values()) if str(j[0])== str(i[0]): flag=1 break if flag==0: list1 = { "work_number":str(j[0]), "name":j[1], "age":j[2], "salary":j[3], "phone":j[4], "birthday":j[5] } col.insert_one(list1) showinfo(title='提示', message='导入成功,可刷新!') x = dataTreeview.get_children() for item in x: dataTreeview.delete(item) lst=col.find({},{'_id':0}) for item in lst: i=list(item.values()) dataTreeview.insert("", 1, text="line1", values=i)def xFunc(event): a=xVariable.get() def exp(): global info info=Toplevel() info.title("保存信息") info.geometry('500x200') button1=Button(info, text="确认备份",command=expInfo).place(relx=0.4, rely=0.8, width=100) Label(info, text="路径:",font=("黑体", 10)).place(relx=0.05, rely=0.2, relwidth=0.2) button2=Button(info, text="选择本地",command=selection).place(relx=0.8, rely=0.2, width=70) Label(info, text="文件名:",font=("黑体", 10)).place(relx=0.05, rely=0.4, relwidth=0.2) com = ttk.Combobox(info, textvariable=xVariable) com.place(relx=0.8, rely=0.4, width=70) com["value"] = (".csv", ".html", ".xlsx",".xls") # #给下拉菜单设定值 com.current(2) com.bind("< >", xFunc) # #给下拉菜单绑定事件 text1=Entry(info, textvariable=path).place(relx=0.25, rely=0.2, relwidth=0.5, height=25) text2=Entry(info, textvariable=file_name).place(relx=0.25, rely=0.4, relwidth=0.5, height=25) info.bind(' ',pas10) def selection(): root2 = Tk() root2.withdraw() Folderpath = filedialog.askdirectory() #获得选择好的文件夹 path.set(str(Folderpath)) def expInfo(): lst=col.find({},{'_id':0}) df = pd.DataFrame(list(lst)) ftp=xVariable.get() file = path.get()+'/'+file_name.get()+xVariable.get() print(file) if ftp=='.csv': df.to_csv(file,index=False,header=True) elif ftp=='.xlsx': df.to_excel(file,index=False,header=True) elif ftp=='.xls': df.to_excel(file,index=False,header=True) elif ftp=='.html': df.to_html(file,index=False,header=True) showinfo(title='提示', message='备份成功!') des() path = StringVar()file_name = StringVar()xVariable = tkinter.StringVar()#页面布局 Button(root, text="刷新信息",command=showAllInfo,font=("黑体", 12),relief="raised", bd=7).place(relx=0.03, rely=0.15, width=120,height=50)root.bind(' ',pas1)Button(root, text="添加信息",command=add,font=("黑体", 12),relief="raised", bd=7).place(relx=0.03, rely=0.25, width=120,height=50)root.bind(' ',pas2)Button(root, text="删除信息",command=pitch_on,font=("黑体", 12),relief="raised", bd=7).place(relx=0.03, rely=0.35, width=120,height=50)root.bind(' ',pas3)Button(root, text="更新信息",command=information2,font=("黑体", 12),relief="raised", bd=7).place(relx=0.03, rely=0.45, width=120,height=50)root.bind(' ',pas4)Button(root, text="搜索信息",command=search,font=("黑体", 12),relief="raised", bd=7).place(relx=0.03, rely=0.55, width=120,height=50)root.bind(' ',pas55)Button(root, text="导入数据",command=impInfo,font=("黑体", 12),relief="raised", bd=7).place(relx=0.03, rely=0.65, width=120,height=50)root.bind(' ',pas6)Button(root, text="导出数据",command=exp,font=("黑体", 12),relief="raised", bd=7).place(relx=0.03, rely=0.75, width=120,height=50)root.bind(' ',pas7) dataTreeview = ttk.Treeview(root, show='headings',height=20, column=('sid', 'name', 'age','salary','phone','birthday'))dataTreeview.column('sid', width=10, anchor="center")dataTreeview.column('name', width=10, anchor="center")dataTreeview.column('age', width=10, anchor="center")dataTreeview.column('salary', width=10, anchor="center")dataTreeview.column('phone', width=10, anchor="center")dataTreeview.column('birthday', width=10, anchor="center")style_value = ttk.Style()style_value.configure("dataTreeview", rowheight=20, font=("微软雅黑", 30))dataTreeview.tag_configure('tag_odd',background="red",foreground="blue")dataTreeview.tag_configure('tag_even',background="black",foreground="orange")scrollBar=Scrollbar(width=20)scrollBar.pack(side=RIGHT,fill=Y)scrollBar.config(command=dataTreeview.yview) dataTreeview.heading('sid', text='工号')dataTreeview.heading('name', text='姓名')dataTreeview.heading('age', text='年龄')dataTreeview.heading('salary', text='薪水')dataTreeview.heading('phone', text='电话')dataTreeview.heading('birthday', text='生日')dataTreeview.bind(' ',information)dataTreeview.bind(' ',pas9)x = dataTreeview.get_children()for item in x: dataTreeview.delete(item)lst=col.find({},{'_id':0})for item in lst: i=list(item.values()) dataTreeview.insert("", 1, text="line1", values=i)dataTreeview.place(relx=0.2,rely=0.1, relwidth=0.78,relheight=20)root.mainloop()
效果展示
看完了这篇文章,相信你对"python基于Tkinter怎么实现人员管理系统"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
提示
格式
错误
信息
输入
黑体
姓名
工号
年龄
生日
电话
搜索
人员
管理系统
系统
管理
薪资
更新
数据
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
高校网络安全的重要意义
深度分析4.29网络安全日
国服第一术士服务器
计算机二级网络安全素质教育题库
泗阳巨型网络技术保养
林夏互联网科技有限公司
郴州网络技术总监
网络安全问题导致的后果
数据库范式包括
深育杯网络安全大赛初赛
ibm软件开发高级工程师
南京新网互联网络科技有限公司
二手e5服务器主板价格
男生学计算机网络技术好吗
软件开发工作收获
数据库技术与其他学科
舟山手机游戏软件开发
物流设备与网络技术应用实验
网络安全中重保什么意思
网络时代什么网络技术最挣钱
上海库存网络技术售后服务
服务器开机卡在选择管理员界面
如何设置oa服务器地址
洛奇英雄传怎么连接服务器
惠普服务器驱动
网络技术发展的基本趋势
中学生网络安全教育ppt课
华为应用软件开发
快速搭建https服务器
没有管理文件服务器的选项