python基于Tkinter怎么实现人员管理系统
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,小编给大家分享一下python基于Tkinter怎么实现人员管理系统,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!前言Tkinter是python内置的标准GUI库,基于Tkinte
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
昆明的互联网科技公司
f2812的软件开发环境
网络安全审查法实施
护苗 网络安全课程之五
淘宝上下架软件开发
软件开发 互联网思维
中科院说中国网络安全
绩溪自动化软件开发服务耗材
吴江区一站式网络技术服务价格
生意宝网络技术服务部
工会网络安全教育总结
九江数据库安全审计
威尔逊数据库
徐汇区辅助软件开发质量保障
软件开发技术员的职责
火狐浏览器电脑版找不到服务器
机顶盒中心服务器连接错误怎么办
怎么知道高斯数据库表已经锁表了
哪里有个软件开发学校
集群服务器网线怎么插
网络安全教育方面100个字
网络安全包括哪些能力
东土科技工业互联网代表
微信小程序属于网络技术开发吗
磁盘阵列的网络安全准入
郑州网络安全培训机构发什么证
scdb数据库
网络安全最高级别是什么
文件服务器 ftp服务器
天门房链网络技术有限公司