参考了大佬的,把mysql数据库改成了sqlserver

附上大佬的代码链接

https://blog.csdn.net/qq_45811949/article/details/106065845?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159192396719195239844044%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159192396719195239844044&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-106065845.ecpm_v1_rank_ctr_v2&utm_term=python%E5%9B%BE%E5%BD%A2%E5%8C%96%E5%AD%A6%E7%94%9F%E7%AE%A1%E7%90%86

程序我都写到了一个.py文件中,之前做的课程作业,现在看起来有点凌乱,

需要先在sqlserver中新建一个XSCJ数据库,里面有两张表,一个student表,一个teacher表

创建表的语句在程序的开头,我注释掉了,先取消掉那个注释,创建完再注释掉就可以了

前两张图片是背景图片,必须用gif格式的(我也不知为什么),还有一个图标ico格式的,网上随便找一个

这是主界面,可以注册和选择角色登录

学生的功能仅有查询自己的成绩和修改密码,老师拥有所有权限

学生的功能就不演示了,直接上教师的功能。

一、这是显示所有学生信息

二、添加学生信息直接输入在上面的文本框,点击添加就可以了

三、删除学生信息,选中表格中的数据,点删除即可,

四、修改学生信息

五、查询学生信息,可用两种查询方式,学号和姓名都可单独查询

六、统计学生信息,可现实最高分、最低分、平均分、及格等的统计

点击柱形图即可统计

我的源代码如下,执行如果出错请先检查数据库,图片要和源程序放在同一路径下

import tkinter
from tkinter import *
from tkinter import ttk
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import time
#导入ADO接口模块
from tkinter import messagebox
from tkinter.messagebox import *
import pymssql
import win32com.client
#连接服务器和数据库
cn=win32com.client.Dispatch('ADODB.Connection')
cnstr='Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=(local)'
cn.Open(cnstr,'sa','sa')
#打开数据库
cn.Execute("USE XSCJ")
#创建表
#cn.Execute("CREATE TABLE student( cno varchar(50), cname varchar(50),password varchar(50),english int, math int, python int,DW int)")
#cn.Execute("CREATE TABLE teacher( name varchar(50),password varchar(50))")
#建立记录集合
rs=win32com.client.Dispatch('ADODB.RecordSet')server = 'DESKTOP-FIHLQ0U'
user ='sa'
userpassword ='sa'
database = 'XSCJ'
conn = pymssql.connect(server,user,userpassword,database)
cursor = conn.cursor()def Main():rt = Tk()rt.title('学生成绩管理系统')rt.geometry('605x328+800+200')rt.iconbitmap('77.ico')bg = PhotoImage(file='背景.gif')lab1 = Label(image=bg)lab1.place(x=0, y=0)Label(text='账户',font=("宋体",'12')).place(x=120, y=90)Label(text='密码',font=("宋体",'12')).place(x=120, y=130)e1=Entry(width=30)e1.focus()e1.place(x=190, y=90)e2=Entry(show='*', width=30)e2.place(x=190, y=130)# 获取当前时间def getTime():timeStr = time.strftime('%Y-%m-%d %H:%M')Rtime.configure(text=timeStr)#rt.after(1000, getTime)# 每隔1s调用函数 getTime 自身获取时间# 时间显示Rtime = tkinter.Label(rt, text='', bg='white')Rtime.place(x=220, y=40)getTime()def XSDL():s1=e1.get()s2=e2.get()cursor.execute("SELECT * FROM student WHERE CNO='%s' AND PASSWORD = '%s' " % (s1, s2))T=cursor.fetchone()if T is None:messagebox.showerror('登录失败', '账户或密码错误!')else:messagebox.showinfo("成功", "登录成功" )rt.destroy()rt1 = Tk()rt1.title('学生登录')rt1.geometry('605x328+800+200')rt1.iconbitmap('77.ico')def qx():rt1.destroy()Main()def CXCJ():rt2 = Tk()rt2.title('学生登录')rt2.geometry('800x400+800+200')rt2.iconbitmap('77.ico')columns = ("学号", "姓名", "英语", "数学", "python", "DW")tree = ttk.Treeview(rt2,height=15, show="headings", columns=columns)  # 隐藏首列tree.column("学号", width=100)  # 表示列,不显示tree.column("姓名", width=100)tree.column("英语", width=100)tree.column("数学", width=100)tree.column("python", width=100)tree.column("DW", width=100)tree.place(x=100, y=10)tree.heading("学号", text='学号', anchor=CENTER)tree.heading("姓名", text='姓名', anchor=CENTER)tree.heading("英语", text='英语', anchor=CENTER)tree.heading("数学", text='数学', anchor=CENTER)tree.heading("python", text='python', anchor=CENTER)tree.heading("DW", text='DW', anchor=CENTER)def qx2():rt2.destroy()Button(rt2,command=qx2, text="取消", width=10).place(x=500, y=350)cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student  where cno='%s'"% s1)T = cursor.fetchall()for row in T:tree.insert("", 0, values=(row[0], row[1], row[2], row[3], row[4], row[5]))def XGMM():Label(text='学号').place(x=100, y=70)Label(text='旧密码:').place(x=100, y=95)Label(text='新密码:').place(x=100, y=120)e3 = Entry(width=30)e3.place(x=200, y=70)e4 = Entry(show='*', width=30)e4.place(x=200, y=95)e5 = Entry(show='*', width=30)e5.place(x=200, y=120)def qr():s3 = e3.get()s4 = e4.get()s5 = e5.get()cursor.execute("SELECT * FROM student WHERE CNO='%s' AND PASSWORD = '%s' " % (s3, s4))T = cursor.fetchone()if T is None:messagebox.showerror('修改失败', '账户或密码错误!')else:rs.LockType = 4cursor.execute("UPDATE  STUDENT SET PASSWORD='%s' WHERE CNO= '%s' " % (s5, s3))conn.commit()messagebox.showinfo("成功", '密码修改成功!!!')Button(command=qr, text="确认", width=10).place(x=140, y=150)Button(command=quit, text="退出", width=10).place(x=240, y=150)Button(command=qx, text="回到首页", width=10).place(x=340, y=150)Button(command=XGMM, text="修改密码", width=10).place(x=140, y=150)Button(command=CXCJ, text="查询成绩", width=10).place(x=240, y=150)Button(command=qx, text="回到首页", width=10).place(x=340, y=150)def JSDL():s1=e1.get()s2=e2.get()cursor.execute("SELECT * FROM teacher WHERE name='%s' AND PASSWORD = '%s' " % (s1, s2))T=cursor.fetchone()if T is None:messagebox.showerror('登录失败', '账户或密码错误!')else:messagebox.showinfo("成功", "登录成功" )rt.destroy()rt1 = Tk()rt1.title('学生成绩管理')rt1.geometry('920x600+600+100')rt1.iconbitmap('77.ico')Label(text='学生成绩管理',font=20,fg='red').place(x=350, y=10)Label(text='学号:',font=10).place(x=10, y=50)Label(text='姓名:',font=10).place(x=310, y=50)Label(text='英语:',font=10).place(x=610, y=50)Label(text='数学:',font=10).place(x=10, y=100)Label(text='python:',font=10).place(x=310, y=100)Label(text='DW:',font=10).place(x=610, y=100)e3 = Entry(width=30)e3.focus()e3.place(x=90, y=50)e4 = Entry(width=30)e4.place(x=390, y=50)e5 = Entry(width=30)e5.place(x=690, y=50)e6 = Entry(width=30)e6.place(x=90, y=100)e7 = Entry(width=30)e7.place(x=390, y=100)e8 = Entry(width=30)e8.place(x=690, y=100)def qx():rt1.destroy()Main()# 显示所有项目def get():#清空表格def delButton(tree):x = tree.get_children()for item in x:tree.delete(item)delButton(tree)cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student order by cno desc")T = cursor.fetchall()for row in T:tree.insert("", 0, values=(row[0],row[1], row[2],row[3], row[4],row[5]))#添加学生信息def add():s3 = e3.get()s4 = e4.get()s5 = e5.get()s6 = e6.get()s7 = e7.get()s8 = e8.get()if len(e3.get()) == 0 and len(e4.get()) == 0:messagebox.showerror("添加失败", "学号不能为空!")else:cursor.execute("SELECT * FROM student WHERE CNO='%s' " % (s3))T = cursor.fetchone()if T is None:rs.LockType = 4cursor.execute("INSERT INTO STUDENT(CNO,CNAME,ENGLISH,MATH,PYTHON,DW) VALUES('%s','%s','%s','%s','%s','%s')" % (s3, s4, s5, s6, s7, s8))conn.commit()messagebox.showinfo("提示", "添加成功!")tree.insert("", 0, values=(s3, s4, s5, s6, s7, s8))else:messagebox.showerror('添加失败', '该学生已存在!')# 删除学生成绩def delete():message['text'] = ''try:tree.item(tree.selection())['values'][0]except IndexError as e:message['text'] = '请选择操作项目'returnmessage['text'] = ''cno = tree.item(tree.selection())['values'][0]rs.LockType = 4cursor.execute("delete from student where cno='%s'" % cno)conn.commit()message['text'] = '{}号删除成功'.format(cno)get()# 修改学生成绩def edit():message['text'] = ''try:tree.item(tree.selection())['values'][0]except IndexError as e:message['text'] = '请选择操作项目'returnold_cno = tree.item(tree.selection())['values'][0]old_name = tree.item(tree.selection())['values'][1]old_english = tree.item(tree.selection())['values'][2]old_math = tree.item(tree.selection())['values'][3]old_python = tree.item(tree.selection())['values'][4]old_DW = tree.item(tree.selection())['values'][5]#顶级窗口edit_win = Toplevel()edit_win.title('修改学生信息')screenwidth = edit_win.winfo_screenwidth()screenheight = edit_win.winfo_screenheight()width = 300high = 350edit_win.geometry('%dx%d+%d+%d' % (width, high, (screenwidth - width) / 2, (screenheight - high) / 2))# 原来的项目Label(edit_win, text='学号').grid(row=0, column=1)Entry(edit_win, textvariable=StringVar(edit_win, value=old_cno), state='readonly').grid(row=0, column=2)Label(edit_win, text='原来姓名').grid(row=2, column=1)Entry(edit_win, textvariable=StringVar(edit_win, value=old_name), state='readonly').grid(row=2, column=2)Label(edit_win, text='新的姓名').grid(row=3, column=1)new_name = Entry(edit_win, textvariable=StringVar(edit_win, value=old_name))new_name.grid(row=3, column=2)Label(edit_win, text='原来英语成绩').grid(row=4, column=1)Entry(edit_win, textvariable=StringVar(edit_win, value=old_english), state='readonly').grid(row=4, column=2)Label(edit_win, text='新的英语成绩').grid(row=5, column=1)new_english = Entry(edit_win, textvariable=StringVar(edit_win, value=old_english))new_english.grid(row=5, column=2)Label(edit_win, text='原来数学成绩').grid(row=6, column=1)Entry(edit_win, textvariable=StringVar(edit_win, value=old_math), state='readonly').grid(row=6, column=2)Label(edit_win, text='新的数学成绩').grid(row=7, column=1)new_math = Entry(edit_win, textvariable=StringVar(edit_win, value=old_math))new_math.grid(row=7, column=2)Label(edit_win, text='原来python成绩').grid(row=8, column=1)Entry(edit_win, textvariable=StringVar(edit_win, value=old_python), state='readonly').grid(row=8, column=2)Label(edit_win, text='新的python成绩').grid(row=9, column=1)new_python = Entry(edit_win, textvariable=StringVar(edit_win, value=old_python))new_python.grid(row=9, column=2)Label(edit_win, text='原来DW成绩').grid(row=10, column=1)Entry(edit_win, textvariable=StringVar(edit_win, value=old_DW), state='readonly').grid(row=10, column=2)Label(edit_win, text='新的DW成绩').grid(row=11, column=1)new_DW = Entry(edit_win, textvariable=StringVar(edit_win, value=old_DW))new_DW.grid(row=11, column=2)# 数据修改处理def edit_record():s3 = new_name.get()s4 = new_english.get()s5 = new_math.get()s6 = new_python.get()s7 = new_DW.get()rs.LockType = 4cursor.execute("update student set cname='%s',english='%s',math='%s',python='%s',DW='%s' where cno='%s' " % ( s3,s4,s5,s6,s7,old_cno))conn.commit()edit_win.destroy()message['text'] = "{}更新成功".format(old_cno)get()Button(edit_win, text='更新',command=edit_record).grid(row=12, column=2, sticky=W + E)edit_win.mainloop()####查询学生成绩def select():top = Toplevel()top.title('查询学生信息')screenwidth = top.winfo_screenwidth()screenheight = top.winfo_screenheight()width = 800high = 600top.geometry('%dx%d+%d+%d' % (width, high, (screenwidth - width) / 2, (screenheight - high) / 2))Label(top,text='请输入学号').place(x=100, y=10)l1 = Entry(top,width=30)l1.place(x=200, y=10)Label(top,text='请输入姓名').place(x=100, y=50)l2 = Entry(top,width=30)l2.place(x=200, y=50)columns = ("学号", "姓名", "英语", "数学", "python", "DW")tree = ttk.Treeview(top,height=15, show="headings", columns=columns)  # 隐藏首列tree.column("学号", width=100)  # 表示列,不显示tree.column("姓名", width=100)tree.column("英语", width=100)tree.column("数学", width=100)tree.column("python", width=100)tree.column("DW", width=100)tree.place(x=100, y=100)tree.heading("学号", text='学号', anchor=CENTER)tree.heading("姓名", text='姓名', anchor=CENTER)tree.heading("英语", text='英语', anchor=CENTER)tree.heading("数学", text='数学', anchor=CENTER)tree.heading("python", text='python', anchor=CENTER)tree.heading("DW", text='DW', anchor=CENTER)def qx2():top.destroy()def qk():# 清空表格def delButton(tree):x = tree.get_children()for item in x:tree.delete(item)delButton(tree)l1.delete(0, 'end')l2.delete(0, 'end')def qr():# 清空表格def delButton(tree):x = tree.get_children()for item in x:tree.delete(item)delButton(tree)t1=l1.get()t2=l2.get()cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student  where cno='%s'" % t1)T = cursor.fetchall()for row in T:tree.insert("", 0, values=(row[0], row[1], row[2], row[3], row[4], row[5]))cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student  where cname='%s'" % t2)T = cursor.fetchall()for row in T:tree.insert("", 0, values=(row[0], row[1], row[2], row[3], row[4], row[5]))Button(top,command=qr, text="查询", width=10).place(x=200, y=450)Button(top,command=qk, text="清空", width=10).place(x=350, y=450)Button(top,command=qx2, text="取消", width=10).place(x=500, y=450)#清空按钮def qk():e3.delete(0,'end')e4.delete(0, 'end')e5.delete(0, 'end')e6.delete(0, 'end')e7.delete(0, 'end')e8.delete(0, 'end')#统计模块def tj():def xs():if cursor.execute("select max(english) , min(english), round(avg(english),1),COUNT (case when english between 0 and 59 then 1 end),COUNT (case when english between 60 and 69 then 1 end),COUNT (case when english between 70 and 79 then 1 end),COUNT (case when english between 80 and 89 then 1 end),COUNT (case when english between 90 and 100 then 1 end),count(*) from student")!=0:S1 = cursor.fetchall()S1 = ("英语",) + S1[0]tree.insert("", 0, values=S1)cursor.execute("select max(math), min(math), round(avg(math),1),COUNT (case when math between 0 and 59 then 1 end),COUNT (case when math between 60 and 69 then 1 end),COUNT (case when math between 70 and 79 then 1 end),COUNT (case when math between 80 and 89 then 1 end),COUNT (case when math between 90 and 100 then 1 end), count(*) from student")S2 = cursor.fetchall()S2 = ("数学",) + S2[0]tree.insert("", 1, values=S2)cursor.execute("select max(python) , min(python), round(avg(python),1),COUNT (case when python between 0 and 59 then 1 end),COUNT (case when python between 60 and 69 then 1 end),COUNT (case when python between 70 and 79 then 1 end),COUNT (case when python between 80 and 89 then 1 end),COUNT (case when python between 90 and 100 then 1 end),count(*) from student")S3 = cursor.fetchall()S3 = ("Python",) + S3[0]tree.insert("", 0, values=S3)cursor.execute("select max(DW), min(DW), round(avg(DW),1),COUNT (case when DW between 0 and 59 then 1 end),COUNT (case when DW between 60 and 69 then 1 end),COUNT (case when DW between 70 and 79 then 1 end),COUNT (case when DW between 80 and 89 then 1 end),COUNT (case when DW between 90 and 100 then 1 end), count(*) from student")S4 = cursor.fetchall()S4 = ("数据仓库",) + S4[0]tree.insert("", 1, values=S4)else:showerror("统计失败", "没有学生数据无法进行统计")def chart():""""统计数据的柱状图"""# 柱状图# 使图形中的中文正常编码显示mpl.rcParams["font.sans-serif"] = ["SimHei"]# 每个柱子下标的索引cursor.execute("select * from student")stu_tuple = cursor.fetchall()x = np.arange(len(stu_tuple))y = [x[5] for x in stu_tuple]y1 = [x[6] for x in stu_tuple]y2= [x[3] for x in stu_tuple]y3 = [x[4] for x in stu_tuple]# 柱子的宽度bar_width = 0.2tick_label = [x[2] for x in stu_tuple]# 绘制柱状图并设置其各项属性plt.bar(x, y, bar_width, align="center", color="c", label="Python", alpha=0.5)plt.bar(x + bar_width, y1, bar_width, color="b", align="center", label="DW", alpha=0.5)plt.bar(x + 2*bar_width, y2, bar_width, color="r", align="center", label="英语", alpha=0.5)plt.bar(x + 3*bar_width, y3, bar_width, color="orange", align="center", label="数学", alpha=0.5)plt.tight_layout(pad=0.4, w_pad=10.0, h_pad=3.0)plt.title("学生成绩统计表")plt.xlabel("姓名")plt.ylabel("成绩")plt.xticks(x + bar_width / 2, tick_label)plt.xticks(rotation=-90)plt.yticks(np.arange(0, 101, 20))# 添加图例plt.legend(loc="upper left")plt.show()"""创建显示统计的窗口"""top = Toplevel()top.title('统计学生信息')screenwidth = top.winfo_screenwidth()screenheight = top.winfo_screenheight()width = 700high = 500top.geometry('%dx%d+%d+%d' % (width, high, (screenwidth - width) / 2, (screenheight - high) / 2))# 创建显示数据的表格tree = ttk.Treeview(top, show='headings', column=('object', 'max', 'min', 'average', 'fail','pass', 'middle', 'good', 'super', 'count'))tree.column('object', width=50, anchor="center")tree.column('max', width=50, anchor="center")tree.column('min', width=50, anchor="center")tree.column('average', width=50, anchor="center")tree.column('fail', width=50, anchor="center")tree.column('pass', width=50, anchor="center")tree.column('middle', width=50, anchor="center")tree.column('good', width=50, anchor="center")tree.column('super', width=50, anchor="center")tree.column('count', width=50, anchor="center")tree.heading('object', text='课程')tree.heading('max', text='最高分')tree.heading('min', text='最低分')tree.heading('average', text='平均分')tree.heading('fail', text='不及格')tree.heading('pass', text='及格')tree.heading('middle', text='中')tree.heading('good', text='良')tree.heading('super', text='优')tree.heading('count', text='总人数')Button(top,command=chart, text="柱形图", width=15).place(x=300, y=400)tree.place(relx=0.02, rely=0.3, relwidth=0.96)xs()Button(command=get, text="显示所有信息", width=15).place(x=750, y=200)Button(command=add, text="添加学生信息", width=15).place(x=750, y=250)Button(command=delete, text="删除学生信息", width=15).place(x=750, y=300)Button(command=edit, text="修改学生信息", width=15).place(x=750, y=350)Button(command=select, text="查询学生信息", width=15).place(x=750, y=400)Button(command=tj, text="统计学生信息", width=15).place(x=750, y=450)Button(command=qx, text="回到首页", width=15).place(x=350, y=550)Button(command=quit, text="退出", width=15).place(x=500, y=550)Button(command=qk, text="清空文本框", width=15).place(x=650, y=550)message = Label(text='', fg='red')message.place(x=100, y=550)columns= ("学号", "姓名", "英语", "数学", "python", "DW")tree = ttk.Treeview( height=15, show="headings",columns=columns)  # 隐藏首列tree.column("学号", width=100)  # 表示列,不显示tree.column("姓名", width=100)tree.column("英语", width=100)tree.column("数学", width=100)tree.column("python", width=100)tree.column("DW", width=100)tree.place(x=100, y=200)tree.heading("学号", text='学号', anchor=CENTER)tree.heading("姓名", text='姓名', anchor=CENTER)tree.heading("英语", text='英语', anchor=CENTER)tree.heading("数学", text='数学', anchor=CENTER)tree.heading("python", text='python', anchor=CENTER)tree.heading("DW", text='DW', anchor=CENTER)#点击列标签排序def treeview_sort_column(tv, col, reverse):  # Treeview、列名、排列方式l = [(tv.set(k, col), k) for k in tv.get_children('')]l.sort(reverse=reverse)  # 排序方式for index, (val, k) in enumerate(l):  # 根据排序后索引移动tv.move(k, '', index)tv.heading(col, command=lambda: treeview_sort_column(tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题for col in columns:tree.heading(col, text=col, command=lambda _col=col: treeview_sort_column(tree, _col, False))rt1.mainloop()#注册模块def zhuce():rt.destroy()rt3 = Tk()rt3.title('注册用户')rt3.geometry('600x323+800+200')rt3.iconbitmap('77.ico')bg2 = PhotoImage(file='学生背景.gif')lab2 = Label(image=bg2)lab2.place(x=-2, y=0)def qx():rt3.destroy()Main()def jszc():rt3.destroy()rt2 = Tk()rt2.title('教师注册')rt2.geometry('600x323+800+200')rt2.iconbitmap('77.ico')Label(text='请输入姓名:').place(x=100, y=70)Label(text='请输入密码:').place(x=100, y=95)e3 = Entry(width=30)e3.place(x=200, y=70)e4 = Entry(show='*', width=30)e4.place(x=200, y=95)def zc1():s1 = e3.get()s2 = e4.get()if len(e3.get()) == 0 and len(e4.get()) == 0:messagebox.showerror("添加失败", "姓名和密码不能为空!")else:cursor.execute("SELECT * FROM teacher WHERE name='%s' " % (s1))T = cursor.fetchone()if T is None:rs.LockType = 4cursor.execute("INSERT INTO teacher(NAME,PASSWORD) VALUES('%s','%s')" % (s1, s2))conn.commit()messagebox.showinfo("提示", "添加成功!")else:messagebox.showerror('添加失败', '该教师已存在!')def zc2():rt2.destroy()Main()Bt1 = Button(command=zc1, text="确定", width=10)Bt1.place(x=200, y=120)Bt2 = Button(command=zc2, text="取消", width=10)Bt2.place(x=300, y=120)rt2.mainloop()def xszc():rt3.destroy()rt2 = Tk()rt2.title('学生注册')rt2.geometry('600x323+800+200')rt2.iconbitmap('77.ico')Label(text='请输入学号:').place(x=100, y=45)Label(text='请输入姓名:').place(x=100, y=70)Label(text='请输入密码:').place(x=100, y=95)e2 = Entry(width=30)e2.place(x=200, y=45)e3 = Entry(width=30)e3.place(x=200, y=70)e4 = Entry(show='*', width=30)e4.place(x=200, y=95)def zc1():s0 = e2.get()s1 = e3.get()s2 = e4.get()if len(e2.get()) == 0 and len(e3.get()) == 0 and len(e4.get()) == 0:messagebox.showerror("添加失败", "学号和姓名、密码不能为空!")else:cursor.execute("SELECT * FROM student WHERE CNO='%s' " % (s0))T = cursor.fetchone()if T is None:rs.LockType = 4cursor.execute("INSERT INTO STUDENT(CNO,CNAME,PASSWORD) VALUES('%s','%s','%s')" % (s0, s1, s2))conn.commit()messagebox.showinfo("提示", "添加成功!")else:messagebox.showerror('添加失败', '该学生已存在!')def zc2():rt2.destroy()Main()Bt1=Button(command=zc1, text="确定", width=10)Bt1.place(x=200, y=120)Bt2 = Button(command=zc2, text="取消", width=10)Bt2.place(x=300, y=120)rt2.mainloop()Bt1 = Button(command=xszc, text="学生注册", width=10,height=3)Bt1.place(x=150, y=120)Bt2 = Button(command=jszc, text="教师注册", width=10,height=3)Bt2.place(x=250, y=120)Bt2 = Button(command=qx, text="回到首页", width=10,height=3)Bt2.place(x=350, y=120)rt3.mainloop()Button(command=XSDL, text="学生登录", width=10).place(x=90, y=190)Button(command=JSDL, text="教师登录", width=10).place(x=190, y=190)Button( command=zhuce, text="用户注册", width=10).place(x=290, y=190)Button(command=quit, text="退出", width=10).place(x=390, y=190)rt.mainloop()
Main()

学生管理系统-Python tkinter图形化界面+sqlserver+柱状图相关推荐

  1. Python + Tkinter 图形化界面设计1 —— 第一个图形化界面

    图形化界面设计的基本理解 Python自带了tkinter 模块,实质上是一种流行的面向对象的GUI工具包 TK 的Python编程接口,提供了快速便利地创建GUI应用程序的方法.其图像化编程的基本步 ...

  2. python——Tkinter图形化界面及threading多线程

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...

  3. Python中Tkinter 图形化界面设计(详细教程)

    Python-Tkinter 图形化界面设计(详细教程) 一.图形化界面设计的基本理解 二. 窗体控件布局 2.1 根窗体呈现示例 2.2 tkinter 常用控件 2.2.1常用控件 2.2.2 控 ...

  4. 肝货,详解 tkinter 图形化界面制作流程!

    作者 | 黄伟呢 来源 | 数据分析与统计学之美 本期案例是带着大家制作一个属于自己的GUI图形化界面->用于设计签名的哦(效果如下图),是不是感觉很好玩,是不是很想学习呢?限于篇幅,今天我们首 ...

  5. 又一个4000字肝货,详解tkinter图形化界面制作流程!

    本期案例是带着大家制作一个属于自己的GUI图形化界面->用于设计签名的哦(效果如下图),是不是感觉很好玩,是不是很想学习呢?限于篇幅,今天我们首先详细讲述一下Tkinter的使用方法.本来不准备 ...

  6. Python系列 | 基于Tkinter图形化界面实现课堂点名系统

    课堂点名器实现的效果: exe程序已打包如下,欢迎大家下载使用!!! 链接:课堂点名系统 提取码: qx18 一.核心功能设计 课堂点名系统实现的思路大致为可以自定义设置班级学生姓名或者默认通过学号进 ...

  7. php图形界面框架,python GUI 图形化界面框架的选择

    根据网上资料的显示目前流行的开源python GUI有以下几个 (以下GUI框架适用于应用的GUI,如果采用WEB方式,UI可使用h5相关标签即可,也可以用框架.): PyQt 的介绍 : http: ...

  8. python编写图形化界面的工具,python做出软件的界面

    python能写界面吗 作为Pyhon开发者,你迟早都会碰到图形用户界面(GUI)应用开发任务,这时候我们就需要一些界面库来帮助我们快速搭建界面,python的界面库很多,我认识的并不多,这里只列出几 ...

  9. 【Python自然语言处理+tkinter图形化界面】实现智能医疗客服问答机器人实战(附源码、数据集、演示 超详细)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.问答智能客服简介 QA问答是Question-and-Answer的缩写,根据用户提出的问题检索答案,并用用户可以理解的自然语言回答用户,问答 ...

最新文章

  1. 出现 java.util.ConcurrentModificationException 时的解决办法
  2. mysql jdbc allow_mysql的jdbc.url携带allowMultiQueries=true参数的作用及其原理
  3. Android笔记 fragment的向下兼容
  4. 二维码批量生成下载工具
  5. Python网络爬虫与信息提取 - requests库入门
  6. csu 1196 - 去爬山
  7. PHPMailer如何获取企业微信授权码
  8. 15 年工龄的阿里P9职场历程自述
  9. MindManager2022注册码-激活码-序列号相关问题解答
  10. Fences隐藏桌面图标快捷方式箭头
  11. pytorch 语⾔模型数据集(周杰伦专辑歌词)数据集 免费
  12. 51单片机游戏(推箱子)
  13. Can‘t find bundle for base name XXXX, locale zh_CN解决方法
  14. android动手写平滑滚动歌词控件
  15. 快速搭建微信小程序第三方平台基础教程(一)第三方平台是做什么的
  16. HTTP 协议之Gzip压缩原理
  17. 前端开发常用编辑器,你用过哪几个?
  18. 怎么把电脑彻底清理干净?电脑怎么清理彻底
  19. 破解mifare Classic(M1)非接触式射频IC卡--Mifare crack Hack 笔记二
  20. mysql怎么删除表中字段的数据库表_Mysql 数据库 表 字段的创建 修改 删除

热门文章

  1. RTT之创建动态线程
  2. openCASCade显示模块样例
  3. C++项目实战:基于多态的职工管理系统(源码)
  4. Sublime text3 打开txt文本文件时出现乱码问题解决
  5. JPA, hibernate, jdbcTemplate(建议使用)区别
  6. Acwing 861-二分图的最大匹配
  7. 在电脑上下载一些平台上视频的方法
  8. 如何在国内完成个人建站
  9. PTX JIT complied failed
  10. java基础加强知识点