千家信息网

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服务器 天门房链网络技术有限公司
0