Python+tkinter 简易学生信息管理系统

  笔者基于tkinter和pymysql开发出一个简易的学生管理系统。为了方便处理,使用第三方工具navicat连接MySQL,建立数据库及学生信息表。

1.连接数据库

  首先使用第三方工具Navicat连接MySQL,如下图所示。
在这里插入图片描述
  接着输入连接名(随意取,这里笔者取的是linkRPC)、主机、端口(默认3306)、用户名(默认root)以及密码,接着点击左下角的“测试连接”按钮,查看是否连接成功。
在这里插入图片描述

2.创建student表

  本项目中笔者创建studentInfo数据库及student表。表的设计如下图所示。
在这里插入图片描述

3.python连接MySQL数据库

  代码如下:

import pymysql

'''连接数据库'''
def linkDB():
    # 打开数据库连接
    db = pymysql.connect(host='127.0.0.1',
                         port=3306,
                         user='root',
                         passwd='123456',
                         db='studentinfo')

    # 使用 cursor() 方法创建一个游标对象cur
    cur = db.cursor(cursor=pymysql.cursors.DictCursor)

    return db,cur

4.主页设计

  首先展示最终的效果,如下图所示。
在这里插入图片描述
  主页有左上角的菜单,并有增加、删除、查询和修改子功能,主页中央有4个按钮,分别实现学生信息的增删查改4个子页面的跳转。
  实现代码如下:

  1. 设置窗口大小以及背景图片:
root = Tk()
# 禁止最大化按钮(只显示最小化按钮和关闭按钮)
root.resizable(False,False)
root.minsize(600,600) # 最小尺寸
root.maxsize(600,600) # 最大尺寸
root.title("学生信息管理系统")
root.config(width=600)
root.config(height=600)
# 添加窗口背景图片
canvas = tkinter.Canvas(root,
                        width = 600,  # 指定Canvas组件的宽度
                        height = 600,  # 指定Canvas组件的高度
                        bg = 'white'  # 指定Canvas组件的背景色
                        )
#记得在运行时修改文件所在位置
image = Image.open('F:\\1.jpg')

im = ImageTk.PhotoImage(image) #用photoImage打开图片
canvas.create_image(200, 170, image=im)  # 使用creat_image将图片添加到Canvas
canvas.pack()
  1. 添加菜单及功能按钮
#创建顶级菜单及其下拉菜单
menubar=Menu(root)
filemenu=Menu(menubar,tearoff=False)
filemenu.add_command(label="增加",command=insert_stu)
filemenu.add_command(label="删除",command=delete_stu)#command接删除函数/下面接修改函数
filemenu.add_command(label="修改",command=change_stu)
filemenu.add_command(label="查询",command=sel_stu)

filemenu.add_separator()
filemenu.add_command(label="退出",command=root.destroy)
menubar.add_cascade(label="菜单",menu=filemenu)

#显示菜单
root.config(menu=menubar)

buttoninsert_stu=Button(root,text="录入学生信息",font=("微软雅黑 -20"),command=insert_stu)
#buttoninsert_stu.grid(row=2,column=0)由下面的代码将该代码覆盖,显示的是在界面上的位置
buttoninsert_stu.place(x=200,y=150,height=40,width=200)

buttondelete_stu=Button(root,text="删除学生信息",font=("微软雅黑 -20"),command=delete_stu)
buttondelete_stu.place(x=200,y=250,height=40,width=200)

buttonchange_stu=Button(root,text="修改学生信息",font=("微软雅黑 -20"),command=change_stu)
buttonchange_stu.place(x=200,y=350,height=40,width=200)

buttonsel_stu=Button(root,text="查询学生信息",font=("微软雅黑 -20"),command=sel_stu)
buttonsel_stu.place(x=200,y=450,height=40,width=200)

root.mainloop()

5.录入学生信息

  首先展示页面。
在这里插入图片描述
  代码如下:

#增加学生信息
def insert_stu():  #录入学生信息
    root1=Tk()
    root1.title("录入学生信息")
    root1.config(width=600)
    root1.config(height=600)

    #创建关联字符变量
    varName=StringVar(root1,value='')
    varId=StringVar(root1,value='')
    varClass=StringVar(root1,value='')
    varAge=StringVar(root1,value='')

    #创建标签组件
    label=Label(root1,text="姓名:",font=("微软雅黑 -20"))
    label.place(x=30,y=60,height=40,width=80)

    label=Label(root1,text="学号:",font=("微软雅黑 -20"))
    label.place(x=30,y=110,height=40,width=80)


    label=Label(root1,text="班级:",font=("微软雅黑 -20"))
    label.place(x=30,y=160,height=40,width=80)


    label=Label(root1,text="年龄:",font=("微软雅黑 -20"))
    label.place(x=30,y=210,height=40,width=80)

    #创建文本框组件,同时设置关联的变量
    #    姓名entryName
    #    学号entryId
    #    班级entryClass
    #    年龄entryAge


    entryName=Entry((root1),textvariable=varName)
    entryName.place(x=120,y=60,height=40,width=200)

    entryId=Entry((root1),textvariable=varId)
    entryId.place(x=120,y=110,height=40,width=200)

    entryClass=Entry((root1),textvariable=varClass)
    entryClass.place(x=120,y=160,height=40,width=200)

    entryAge=Entry((root1),textvariable=varAge)
    entryAge.place(x=120,y=210,height=40,width=200)


    def buttonOK():
        i=0
        db, cur = linkDB()

        stu_id = eval(entryId.get())#学号输入
        stu_name =str(entryName.get())#姓名录入
        stu_class =eval(entryClass.get())#班级录入
        stu_age=eval(entryAge.get())#年龄录入

        # 查找完成若有重复的学号,则警告。否则录入数据库
        num = cur.execute("SELECT * from student where StuId =  " + str(stu_id) + ' ;')
        if num > 0:
            i = 1
        else:
            i = 0

        if i==1:
            messagebox.showerror('警告',message='学号重复,请重新输入')
        else:
            try:
                sql1 = "INSERT INTO student(StuId,NAME,CLA,AGE)"
                sql1+="VALUES(%d,'%s',%d,%d)"%(stu_id,stu_name,stu_class,stu_age)
                cur.execute(sql1)
                db.commit()
                messagebox.showinfo(title='恭喜',message='录入成功!')
                root1.destroy()
            except:
                messagebox.showerror('警告',message='未录入成功')


    buttonbuttonOK=Button(root1,text="录入学生信息",font=("微软雅黑 -20"),command=buttonOK)
    buttonbuttonOK.place(x=150,y=300,height=40,width=200)
    def cancel():
        varName.set('')
        varId.set('')
        varClass.set('')
        varAge.set('')


    #取消键
    buttonCancel=Button(root1,text="取消",font=("微软雅黑 -20"),command=cancel)
    buttonCancel.place(x=150,y=350,height=40,width=200)

    #退出键
    buttondel=Button(root1,text="退出",font=("微软雅黑 -20"),command=root1.destroy)
    buttondel.place(x=150,y=400,height=40,width=200)
    root1.mainloop()

6.删除学生信息

  以下是删除学生信息页面:
在这里插入图片描述
  代码如下:

# 实现删除学生信息
def delete_stu():
    root2=Tk()
    root2.title("删除学生信息")
    root2.config(width=600)
    root2.config(height=600)


    #添加窗口背景图片

    #创建标签
    label=Label(root2,text="学号:",font=("微软雅黑 -20"))
    label.place(x=30,y=20,height=40,width=80)

    entryId=Entry(root2)
    entryId.place(x=120,y=20,height=40,width=200)

    def delete():
        db, cur = linkDB()
        stu_id = eval(entryId.get())#学号输入
        cur.execute("DELETE from student where StuId = '%s';"%stu_id)
        db.commit()
        messagebox.showinfo(title='恭喜',message='删除成功!')
        root2.destroy()

    #删除键
    buttondelete=Button(root2,text="删除",font=("微软雅黑 -20"),command=delete)
    buttondelete.place(x=150,y=160,height=40,width=200)

    #退出键
    buttondel=Button(root2,text="退出",font=("微软雅黑 -20"),command=root2.destroy)
    buttondel.place(x=150,y=210,height=40,width=200)

    root2.mainloop()

7.查询学生信息

  查询学生信息页面效果如下:
在这里插入图片描述
  代码如下:

# 查询学生信息
def sel_stu():
    root3=Tk()
    root3.title("查询学生信息")
    root3.config(width=600)
    root3.config(height=600)


    #创建关联变量
    sId=StringVar(root3,value='')

    #创建文本组件框\标签组件
    label=Label(root3,text="学号",font=("微软雅黑 -20"))
    label.place(x=30,y=10,height=40,width=80)

    selId=Entry((root3),textvariable=sId)
    selId.place(x=120,y=10,height=40,width=200)


    def select():

        #创建关联字符变量
        varName=StringVar(root3,value='')
        varId=StringVar(root3,value='')
        varClass=StringVar(root3,value='')
        varAge=StringVar(root3,value='')


        db, cur = linkDB()
        stu_id = eval(selId.get())#学号输入
        num = cur.execute("SELECT * from student where StuId = '%d';"%stu_id)
        db.commit()
        if num > 0:
            cursor = cur.fetchall()
            for row in cursor:
                if stu_id == row['StuId']:
                    stu_name = row['NAME']
                    stu_class = row['CLA']
                    stu_age = row['AGE']
            varName.set(stu_name)
            varId.set(stu_id)
            varClass.set(stu_class)
            varAge.set(stu_age)
        else:
            messagebox.showinfo(title='警告', message='无当前学生信息')

        #创建标签组件
        label=Label(root3,text="姓名:",font=("微软雅黑 -20"))
        label.place(x=30,y=110,height=40,width=80)

        label=Label(root3,text="学号:",font=("微软雅黑 -20"))
        label.place(x=30,y=160,height=40,width=80)


        label=Label(root3,text="班级:",font=("微软雅黑 -20"))
        label.place(x=30,y=210,height=40,width=80)


        label=Label(root3,text="年龄:",font=("微软雅黑 -20"))
        label.place(x=30,y=260,height=40,width=80)

        #创建文本框组件,同时设置关联的变量
        #    姓名entryName
        #    学号entryId
        #    班级entryClass
        #    年龄entryAge

        entryName=Entry((root3),textvariable=varName)
        entryName.place(x=120,y=110,height=40,width=200)

        entryId=Entry((root3),textvariable=varId)
        entryId.place(x=120,y=160,height=40,width=200)

        entryClass=Entry((root3),textvariable=varClass)
        entryClass.place(x=120,y=210,height=40,width=200)

        entryAge=Entry((root3),textvariable=varAge)
        entryAge.place(x=120,y=260,height=40,width=200)


    #查询键
    buttonselect=Button(root3,text="查询",font=("微软雅黑 -20"),command=select)
    buttonselect.place(x=200,y=60,height=40,width=100)

    #取消键
    def cancel():
        sId.set('')

    buttoncancel=Button(root3,text="取消",font="微软雅黑 -20",command=cancel)
    buttoncancel.place(x=50,y=60,height=40,width=100)

    #退出键
    buttondel=Button(root3,text="退出",font="微软雅黑 -20",command=root3.destroy)
    buttondel.place(x=350,y=60,height=40,width=100)
    root3.mainloop()

8.修改学生信息

  修改学生信息页面如下:
在这里插入图片描述
  代码如下:

def change_stu():
    root4=Tk()
    root4.title("修改学生信息")
    root4.config(width=600)
    root4.config(height=600)

    #创建关联变量
    sId=StringVar(root4,value='')

    #创建文本组件框\标签组件
    label=Label(root4,text="学号",font=("微软雅黑 -20"))
    label.place(x=30,y=10,height=40,width=80)

    selId=Entry((root4),textvariable=sId)
    selId.place(x=120,y=10,height=40,width=200)

    #创建关联字符变量
    varName=StringVar(root4,value='')
    varId=StringVar(root4,value='')
    varClass=StringVar(root4,value='')
    varAge=StringVar(root4,value='')

    #创建标签组件

    label=Label(root4,text="姓名:",font=("微软雅黑 -20"))
    label.place(x=30,y=110,height=40,width=80)

    label=Label(root4,text="学号:",font=("微软雅黑 -20"))
    label.place(x=30,y=160,height=40,width=80)


    label=Label(root4,text="班级:",font=("微软雅黑 -20"))
    label.place(x=30,y=210,height=40,width=80)


    label=Label(root4,text="年龄:",font=("微软雅黑 -20"))
    label.place(x=30,y=260,height=40,width=80)

        #创建文本框组件,同时设置关联的变量
        #    姓名entryName
        #    学号entryId
        #    班级entryClass
        #    年龄entryAge
    entryName=Entry((root4),textvariable=varName)
    entryName.place(x=120,y=110,height=40,width=200)

    entryId=Entry((root4),textvariable=varId)
    entryId.place(x=120,y=160,height=40,width=200)

    entryClass=Entry((root4),textvariable=varClass)
    entryClass.place(x=120,y=210,height=40,width=200)

    entryAge=Entry((root4),textvariable=varAge)
    entryAge.place(x=120,y=260,height=40,width=200)

    def select():

        db, cur = linkDB()
        stu_id = eval(selId.get())#学号输入
        num = cur.execute("SELECT * from student where StuId = %d;"%stu_id)
        if  num > 0:
            i = 1
        else:
            i = 0

        if i==1:
            cursor = cur.fetchall()
            db.commit()
            for row in cursor:
                if stu_id == row['StuId']:
                    stu_name = row['NAME']
                    stu_class = row['CLA']
                    stu_age = row['AGE']

            varName.set(stu_name)
            varId.set(stu_id)
            varClass.set(stu_class)
            varAge.set(stu_age)
        else:
            messagebox.showerror('警告',message='无当前学生信息')


    def saveName():
        db, cur = linkDB()
        name=entryName.get()
        sql="UPDATE student SET NAME='%s' WHERE StuId=%d;"%(name,eval(selId.get()))
        cur.execute(sql)
        db.commit()

        messagebox.showinfo(title='恭喜',message='保存成功!')

    def saveCla():
        db, cur = linkDB()
        cla=eval(entryClass.get())
        sql = "UPDATE student SET CLA='%s' WHERE StuId=%d;" % (cla, eval(selId.get()))
        cur.execute(sql)
        db.commit()
        messagebox.showinfo(title='恭喜', message='保存成功!')
    def saveAge():
        db, cur = linkDB()
        age=eval(entryAge.get())
        sql="UPDATE student SET AGE=%d WHERE StuId=%d;" % (age,eval(selId.get()))
        cur.execute(sql)
        db.commit()

        messagebox.showinfo(title='恭喜',message='保存成功!')


    #保存键
    buttonname=Button(root4,text="保存",font=("微软雅黑 -20"),command=saveName)
    buttonname.place(x=330,y=110,height=40,width=60)

    buttoncla=Button(root4,text="保存",font=("微软雅黑 -20"),command=saveCla)
    buttoncla.place(x=330,y=210,height=40,width=60)

    buttonage=Button(root4,text="保存",font=("微软雅黑 -20"),command=saveAge)
    buttonage.place(x=330,y=260,height=40,width=60)

    def cancel():
        sId.set('')

    #取消键
    buttoncancel=Button(root4,text="取消",font=("微软雅黑 -20"),command=cancel)
    buttoncancel.place(x=20,y=60,height=40,width=60)

    #查询键
    buttonselect=Button(root4,text="查询",font=("微软雅黑 -20"),command=select)
    buttonselect.place(x=100,y=60,height=40,width=60)

    #退出键
    buttondel=Button(root4,text="退出",font="微软雅黑 -20",command=root4.destroy)
    buttondel.place(x=260,y=60,height=40,width=60)

    root4.mainloop()

9.完整代码

# -*- coding: utf-8 -*-
#Author: WXW
#@Time: 2021/12/4  16:35
# 学生信息管理系统

from tkinter import *
from tkinter import messagebox
from PIL import Image,ImageTk
import tkinter
import pymysql

'''连接数据库'''
def linkDB():
    # 打开数据库连接
    db = pymysql.connect(host='127.0.0.1',
                         port=3306,
                         user='root',
                         passwd='123456',
                         db='studentinfo')

    # 使用 cursor() 方法创建一个游标对象cur
    cur = db.cursor(cursor=pymysql.cursors.DictCursor)

    return db,cur

root = Tk()
# 禁止最大化按钮(只显示最小化按钮和关闭按钮)
root.resizable(False,False)
root.minsize(600,600) # 最小尺寸
root.maxsize(600,600) # 最大尺寸
root.title("学生信息管理系统")
root.config(width=600)
root.config(height=600)
# 添加窗口背景图片
canvas = tkinter.Canvas(root,
                        width = 600,  # 指定Canvas组件的宽度
                        height = 600,  # 指定Canvas组件的高度
                        bg = 'white'  # 指定Canvas组件的背景色
                        )
#记得在运行时修改文件所在位置
image = Image.open('F:\\1.jpg')

im = ImageTk.PhotoImage(image) #用photoImage打开图片
canvas.create_image(200, 170, image=im)  # 使用creat_image将图片添加到Canvas
canvas.pack()


#增加学生信息
def insert_stu():  #录入学生信息
    root1=Tk()
    root1.title("录入学生信息")
    root1.config(width=600)
    root1.config(height=600)

    #创建关联字符变量
    varName=StringVar(root1,value='')
    varId=StringVar(root1,value='')
    varClass=StringVar(root1,value='')
    varAge=StringVar(root1,value='')

    #创建标签组件
    label=Label(root1,text="姓名:",font=("微软雅黑 -20"))
    label.place(x=30,y=60,height=40,width=80)

    label=Label(root1,text="学号:",font=("微软雅黑 -20"))
    label.place(x=30,y=110,height=40,width=80)


    label=Label(root1,text="班级:",font=("微软雅黑 -20"))
    label.place(x=30,y=160,height=40,width=80)


    label=Label(root1,text="年龄:",font=("微软雅黑 -20"))
    label.place(x=30,y=210,height=40,width=80)

    #创建文本框组件,同时设置关联的变量
    #    姓名entryName
    #    学号entryId
    #    班级entryClass
    #    年龄entryAge


    entryName=Entry((root1),textvariable=varName)
    entryName.place(x=120,y=60,height=40,width=200)

    entryId=Entry((root1),textvariable=varId)
    entryId.place(x=120,y=110,height=40,width=200)

    entryClass=Entry((root1),textvariable=varClass)
    entryClass.place(x=120,y=160,height=40,width=200)

    entryAge=Entry((root1),textvariable=varAge)
    entryAge.place(x=120,y=210,height=40,width=200)


    def buttonOK():
        i=0
        db, cur = linkDB()

        stu_id = eval(entryId.get())#学号输入
        stu_name =str(entryName.get())#姓名录入
        stu_class =eval(entryClass.get())#班级录入
        stu_age=eval(entryAge.get())#年龄录入

        # 查找完成若有重复的学号,则警告。否则录入数据库
        num = cur.execute("SELECT * from student where StuId =  " + str(stu_id) + ' ;')
        if num > 0:
            i = 1
        else:
            i = 0

        if i==1:
            messagebox.showerror('警告',message='学号重复,请重新输入')
        else:
            try:
                sql1 = "INSERT INTO student(StuId,NAME,CLA,AGE)"
                sql1+="VALUES(%d,'%s',%d,%d)"%(stu_id,stu_name,stu_class,stu_age)
                cur.execute(sql1)
                db.commit()
                messagebox.showinfo(title='恭喜',message='录入成功!')
                root1.destroy()
            except:
                messagebox.showerror('警告',message='未录入成功')


    buttonbuttonOK=Button(root1,text="录入学生信息",font=("微软雅黑 -20"),command=buttonOK)
    buttonbuttonOK.place(x=150,y=300,height=40,width=200)
    def cancel():
        varName.set('')
        varId.set('')
        varClass.set('')
        varAge.set('')


    #取消键
    buttonCancel=Button(root1,text="取消",font=("微软雅黑 -20"),command=cancel)
    buttonCancel.place(x=150,y=350,height=40,width=200)

    #退出键
    buttondel=Button(root1,text="退出",font=("微软雅黑 -20"),command=root1.destroy)
    buttondel.place(x=150,y=400,height=40,width=200)
    root1.mainloop()

# 实现删除学生信息
def delete_stu():
    root2=Tk()
    root2.title("删除学生信息")
    root2.config(width=600)
    root2.config(height=600)

    #创建标签
    label=Label(root2,text="学号:",font=("微软雅黑 -20"))
    label.place(x=30,y=20,height=40,width=80)

    entryId=Entry(root2)
    entryId.place(x=120,y=20,height=40,width=200)

    def delete():
        db, cur = linkDB()
        stu_id = eval(entryId.get())#学号输入
        cur.execute("DELETE from student where StuId = '%s';"%stu_id)
        db.commit()
        messagebox.showinfo(title='恭喜',message='删除成功!')
        root2.destroy()

    #删除键
    buttondelete=Button(root2,text="删除",font=("微软雅黑 -20"),command=delete)
    buttondelete.place(x=150,y=160,height=40,width=200)

    #退出键
    buttondel=Button(root2,text="退出",font=("微软雅黑 -20"),command=root2.destroy)
    buttondel.place(x=150,y=210,height=40,width=200)

    root2.mainloop()

# 查询学生信息
def sel_stu():
    root3=Tk()
    root3.title("查询学生信息")
    root3.config(width=600)
    root3.config(height=600)


    #创建关联变量
    sId=StringVar(root3,value='')

    #创建文本组件框\标签组件
    label=Label(root3,text="学号",font=("微软雅黑 -20"))
    label.place(x=30,y=10,height=40,width=80)

    selId=Entry((root3),textvariable=sId)
    selId.place(x=120,y=10,height=40,width=200)


    def select():
        #创建关联字符变量
        varName=StringVar(root3,value='')
        varId=StringVar(root3,value='')
        varClass=StringVar(root3,value='')
        varAge=StringVar(root3,value='')


        db, cur = linkDB()
        stu_id = eval(selId.get())#学号输入
        num = cur.execute("SELECT * from student where StuId = '%d';"%stu_id)
        db.commit()
        if num > 0:
            cursor = cur.fetchall()
            for row in cursor:
                if stu_id == row['StuId']:
                    stu_name = row['NAME']
                    stu_class = row['CLA']
                    stu_age = row['AGE']
            varName.set(stu_name)
            varId.set(stu_id)
            varClass.set(stu_class)
            varAge.set(stu_age)
        else:
            messagebox.showinfo(title='警告', message='无当前学生信息')


        #创建标签组件
        label=Label(root3,text="姓名:",font=("微软雅黑 -20"))
        label.place(x=30,y=110,height=40,width=80)

        label=Label(root3,text="学号:",font=("微软雅黑 -20"))
        label.place(x=30,y=160,height=40,width=80)


        label=Label(root3,text="班级:",font=("微软雅黑 -20"))
        label.place(x=30,y=210,height=40,width=80)


        label=Label(root3,text="年龄:",font=("微软雅黑 -20"))
        label.place(x=30,y=260,height=40,width=80)

        #创建文本框组件,同时设置关联的变量
        #    姓名entryName
        #    学号entryId
        #    班级entryClass
        #    年龄entryAge

        entryName=Entry((root3),textvariable=varName)
        entryName.place(x=120,y=110,height=40,width=200)

        entryId=Entry((root3),textvariable=varId)
        entryId.place(x=120,y=160,height=40,width=200)

        entryClass=Entry((root3),textvariable=varClass)
        entryClass.place(x=120,y=210,height=40,width=200)

        entryAge=Entry((root3),textvariable=varAge)
        entryAge.place(x=120,y=260,height=40,width=200)


    #查询键
    buttonselect=Button(root3,text="查询",font=("微软雅黑 -20"),command=select)
    buttonselect.place(x=200,y=60,height=40,width=100)

    #取消键
    def cancel():
        sId.set('')

    buttoncancel=Button(root3,text="取消",font="微软雅黑 -20",command=cancel)
    buttoncancel.place(x=50,y=60,height=40,width=100)

    #退出键
    buttondel=Button(root3,text="退出",font="微软雅黑 -20",command=root3.destroy)
    buttondel.place(x=350,y=60,height=40,width=100)
    root3.mainloop()

def change_stu():
    root4=Tk()
    root4.title("修改学生信息")
    root4.config(width=600)
    root4.config(height=600)

    #创建关联变量
    sId=StringVar(root4,value='')

    #创建文本组件框\标签组件
    label=Label(root4,text="学号",font=("微软雅黑 -20"))
    label.place(x=30,y=10,height=40,width=80)

    selId=Entry((root4),textvariable=sId)
    selId.place(x=120,y=10,height=40,width=200)

    #创建关联字符变量
    varName=StringVar(root4,value='')
    varId=StringVar(root4,value='')
    varClass=StringVar(root4,value='')
    varAge=StringVar(root4,value='')

    #创建标签组件

    label=Label(root4,text="姓名:",font=("微软雅黑 -20"))
    label.place(x=30,y=110,height=40,width=80)

    label=Label(root4,text="学号:",font=("微软雅黑 -20"))
    label.place(x=30,y=160,height=40,width=80)


    label=Label(root4,text="班级:",font=("微软雅黑 -20"))
    label.place(x=30,y=210,height=40,width=80)


    label=Label(root4,text="年龄:",font=("微软雅黑 -20"))
    label.place(x=30,y=260,height=40,width=80)

        #创建文本框组件,同时设置关联的变量
        #    姓名entryName
        #    学号entryId
        #    班级entryClass
        #    年龄entryAge
    entryName=Entry((root4),textvariable=varName)
    entryName.place(x=120,y=110,height=40,width=200)

    entryId=Entry((root4),textvariable=varId)
    entryId.place(x=120,y=160,height=40,width=200)

    entryClass=Entry((root4),textvariable=varClass)
    entryClass.place(x=120,y=210,height=40,width=200)

    entryAge=Entry((root4),textvariable=varAge)
    entryAge.place(x=120,y=260,height=40,width=200)

    def select():

        db, cur = linkDB()
        stu_id = eval(selId.get())#学号输入
        num = cur.execute("SELECT * from student where StuId = %d;"%stu_id)
        if  num > 0:
            i = 1
        else:
            i = 0

        if i==1:
            cursor = cur.fetchall()
            db.commit()
            for row in cursor:
                if stu_id == row['StuId']:
                    stu_name = row['NAME']
                    stu_class = row['CLA']
                    stu_age = row['AGE']

            varName.set(stu_name)
            varId.set(stu_id)
            varClass.set(stu_class)
            varAge.set(stu_age)
        else:
            messagebox.showerror('警告',message='无当前学生信息')


    def saveName():
        db, cur = linkDB()
        name=entryName.get()
        sql="UPDATE student SET NAME='%s' WHERE StuId=%d;"%(name,eval(selId.get()))
        cur.execute(sql)
        db.commit()

        messagebox.showinfo(title='恭喜',message='保存成功!')

    def saveCla():
        db, cur = linkDB()
        cla=eval(entryClass.get())
        sql = "UPDATE student SET CLA='%s' WHERE StuId=%d;" % (cla, eval(selId.get()))
        cur.execute(sql)
        db.commit()
        messagebox.showinfo(title='恭喜', message='保存成功!')
    def saveAge():
        db, cur = linkDB()
        age=eval(entryAge.get())
        sql="UPDATE student SET AGE=%d WHERE StuId=%d;" % (age,eval(selId.get()))
        cur.execute(sql)
        db.commit()

        messagebox.showinfo(title='恭喜',message='保存成功!')


    #保存键
    buttonname=Button(root4,text="保存",font=("微软雅黑 -20"),command=saveName)
    buttonname.place(x=330,y=110,height=40,width=60)

    buttoncla=Button(root4,text="保存",font=("微软雅黑 -20"),command=saveCla)
    buttoncla.place(x=330,y=210,height=40,width=60)

    buttonage=Button(root4,text="保存",font=("微软雅黑 -20"),command=saveAge)
    buttonage.place(x=330,y=260,height=40,width=60)

    def cancel():
        sId.set('')

    #取消键
    buttoncancel=Button(root4,text="取消",font=("微软雅黑 -20"),command=cancel)
    buttoncancel.place(x=20,y=60,height=40,width=60)

    #查询键
    buttonselect=Button(root4,text="查询",font=("微软雅黑 -20"),command=select)
    buttonselect.place(x=100,y=60,height=40,width=60)

    #退出键
    buttondel=Button(root4,text="退出",font="微软雅黑 -20",command=root4.destroy)
    buttondel.place(x=260,y=60,height=40,width=60)

    root4.mainloop()

#创建顶级菜单及其下拉菜单
menubar=Menu(root)
filemenu=Menu(menubar,tearoff=False)
filemenu.add_command(label="增加",command=insert_stu)
filemenu.add_command(label="删除",command=delete_stu)#command接删除函数/下面接修改函数
filemenu.add_command(label="修改",command=change_stu)
filemenu.add_command(label="查询",command=sel_stu)

filemenu.add_separator()
filemenu.add_command(label="退出",command=root.destroy)
menubar.add_cascade(label="菜单",menu=filemenu)

#显示菜单
root.config(menu=menubar)

buttoninsert_stu=Button(root,text="录入学生信息",font=("微软雅黑 -20"),command=insert_stu)
buttoninsert_stu.place(x=200,y=150,height=40,width=200)

buttondelete_stu=Button(root,text="删除学生信息",font=("微软雅黑 -20"),command=delete_stu)
buttondelete_stu.place(x=200,y=250,height=40,width=200)

buttonchange_stu=Button(root,text="修改学生信息",font=("微软雅黑 -20"),command=change_stu)
buttonchange_stu.place(x=200,y=350,height=40,width=200)

buttonsel_stu=Button(root,text="查询学生信息",font=("微软雅黑 -20"),command=sel_stu)
buttonsel_stu.place(x=200,y=450,height=40,width=200)

root.mainloop()

猜你喜欢

转载自blog.csdn.net/weixin_43943476/article/details/121809295