Python-分角色登录界面(tkinterpymysql)
Posted 小狐狸FM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-分角色登录界面(tkinterpymysql)相关的知识,希望对你有一定的参考价值。
前言
- 使用到的库有
tkinter
和pymysql
,pymysql
主要用于连接mysql
数据库
pymysql
在python3
中使用,mysqldb
在python2
中使用。- 实现一下在
mysql
数据库中查询用户名和密码信息登录的功能。
重置输入框的功能没弄出来,希望大佬可以指点一下
相关介绍
Python3 MySQL 数据库连接 - PyMySQL 驱动
一、准备阶段
[1]. 导包
import pymysql #mysql数据库
import tkinter #GUI界面
from tkinter import ttk #GUI界面
[2]. 数据库
创建两个表admin和user,用来存储管理员和用户的账户、密码信息
admin表
user表
二、登录失败界面
def Menu_fail():
'''失败提示界面'''
# 失败提示界面
window_fail = tkinter.Tk()
window_fail.title("登录失败")
window_fail.geometry("300x300")
txt_fail = tkinter.Label(window_fail, text="用户名或密码不正确")
txt_fail.place(relx=0.3, rely=0.4)
window_fail.mainloop()
三、登录成功界面
def Menu_Success_User():
'''用户登录成功界面'''
window_user = tkinter.Tk()
window_user.title("用户界面")
window_user.geometry("300x300")
txt_user = tkinter.Label(window_user, text="登录成功")
txt_user.place(relx=0.35, rely=0.4)
window_user.mainloop()
def Menu_Success_Admin():
'''管理员登录成功界面'''
window_user = tkinter.Tk()
window_user.title("管理员界面")
window_user.geometry("300x300")
txt_user = tkinter.Label(window_user, text="登录成功")
txt_user.place(relx=0.35, rely=0.4)
window_user.mainloop()
四、主界面
使用了分页的功能,在同一个窗口中可以切换两个
if __name__ == '__main__':
#主窗口
window = tkinter.Tk()
window.title("登录界面")
window.geometry('400x400')
#分页
note = ttk.Notebook()
note.place(relx=0.02,rely=0.02,relwidth=1,relheight=1)
# 第一页
frame1 = tkinter.Frame()
note.add(frame1, text='普通用户登录')
txt1 = tkinter.Label(frame1,text='用户名')
txt2 = tkinter.Label(frame1,text='密码')
entry1 = tkinter.Entry(frame1,width=20)
entry2 = tkinter.Entry(frame1,width=20,show='*')
button1 = tkinter.Button(frame1, text='提交',command=lambda:LoginUser(entry1,entry2))
button2 = tkinter.Button(frame1,text="退出",command=lambda:window.destroy())
txt1.place(relx=0.2,rely=0.2)
txt2.place(relx=0.2, rely=0.4)
button1.place(relx=0.35,rely=0.6)
button2.place(relx=0.55,rely=0.6)
entry1.place(relx=0.35,rely=0.2)
entry2.place(relx=0.35,rely=0.4)
# 第二页
frame2 = tkinter.Frame()
note.add(frame2, text='管理员登录')
txt11 = tkinter.Label(frame2, text='用户名')
txt22 = tkinter.Label(frame2, text='密码')
entry11 = tkinter.Entry(frame2, width=20)
entry22 = tkinter.Entry(frame2, width=20, show='*')
button11 = tkinter.Button(frame2, text='提交', command=lambda: LoginAdmin(entry11, entry22))
button22 = tkinter.Button(frame2, text="退出", command=lambda: window.destroy())
txt11.place(relx=0.2, rely=0.2)
txt22.place(relx=0.2, rely=0.4)
button11.place(relx=0.35, rely=0.6)
button22.place(relx=0.55, rely=0.6)
entry11.place(relx=0.35, rely=0.2)
entry22.place(relx=0.35, rely=0.4)
# 窗口循环
window.mainloop()
五、登录检测
记得修改一下数据库连接中的数据库名和密码信息
如果查询不到信息时,cursor.fetchone()
得到的值为None
def LoginUser(entry1,entry2):
'''普通用户登录检测,登录或失败时跳出对应的窗口'''
name = entry1.get() #用户名
pwd = entry2.get() #密码
if(name=="") or (pwd==""): #用户名或密码为空时
Menu_fail()
return
# 打开数据库连接
db = pymysql.connect(host='localhost', user='root', password='toor', port=3306, db='test')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 查询
cursor.execute(f"select * from user where name = '{name}' and pwd = '{pwd}'")
data = cursor.fetchone() # 获取查询结果
# 关闭数据库连接
db.close()
if(data==None): #查询失败时
Menu_fail()
else: #查询成功时
Menu_Success_User()
def LoginAdmin(entry1,entry2):
'''管理员登录检测,登录或失败时跳出对应的窗口'''
name = entry1.get() #用户名
pwd = entry2.get() #密码
if(name=="") or (pwd==""): #用户名或密码为空时
Menu_fail()
return
# 打开数据库连接
db = pymysql.connect(host='localhost', user='root', password='toor', port=3306, db='test')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 查询
cursor.execute(f"select * from admin where name = '{name}' and pwd = '{pwd}'")
data = cursor.fetchone() # 获取查询结果
# 关闭数据库连接
db.close()
if(data==None): #查询失败时
Menu_fail()
else: #查询成功时
Menu_Success_Admin()
六、全部代码
import pymysql #mysql数据库
import tkinter #GUI界面
from tkinter import ttk #GUI界面
def Menu_fail():
'''失败提示界面'''
# 失败提示界面
window_fail = tkinter.Tk()
window_fail.title("登录失败")
window_fail.geometry("300x300")
txt_fail = tkinter.Label(window_fail, text="用户名或密码不正确")
txt_fail.place(relx=0.3, rely=0.4)
window_fail.mainloop()
def Menu_Success_User():
'''用户登录成功界面'''
window_user = tkinter.Tk()
window_user.title("用户界面")
window_user.geometry("300x300")
txt_user = tkinter.Label(window_user, text="登录成功")
txt_user.place(relx=0.35, rely=0.4)
window_user.mainloop()
def Menu_Success_Admin():
'''管理员登录成功界面'''
window_user = tkinter.Tk()
window_user.title("管理员界面")
window_user.geometry("300x300")
txt_user = tkinter.Label(window_user, text="登录成功")
txt_user.place(relx=0.35, rely=0.4)
window_user.mainloop()
def LoginUser(entry1,entry2):
'''普通用户登录检测,登录或失败时跳出对应的窗口'''
name = entry1.get() #用户名
pwd = entry2.get() #密码
if(name=="") or (pwd==""): #用户名或密码为空时
Menu_fail()
return
# 打开数据库连接
db = pymysql.connect(host='localhost', user='root', password='toor', port=3306, db='test')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 查询
cursor.execute(f"select * from user where name = '{name}' and pwd = '{pwd}'")
data = cursor.fetchone() # 获取查询结果
# 关闭数据库连接
db.close()
if(data==None): #查询失败时
Menu_fail()
else: #查询成功时
Menu_Success_User()
def LoginAdmin(entry1,entry2):
'''管理员登录检测,登录或失败时跳出对应的窗口'''
name = entry1.get() #用户名
pwd = entry2.get() #密码
if(name=="") or (pwd==""): #用户名或密码为空时
Menu_fail()
return
# 打开数据库连接
db = pymysql.connect(host='localhost', user='root', password='toor', port=3306, db='test')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 查询
cursor.execute(f"select * from admin where name = '{name}' and pwd = '{pwd}'")
data = cursor.fetchone() # 获取查询结果
# 关闭数据库连接
db.close()
if(data==None): #查询失败时
Menu_fail()
else: #查询成功时
Menu_Success_Admin()
if __name__ == '__main__':
#主窗口
window = tkinter.Tk()
window.title("登录界面")
window.geometry('400x400')
#分页
note = ttk.Notebook()
note.place(relx=0.02,rely=0.02,relwidth=1,relheight=1)
# 第一页
frame1 = tkinter.Frame()
note.add(frame1, text='普通用户登录')
txt1 = tkinter.Label(frame1,text='用户名')
txt2 = tkinter.Label(frame1,text='密码')
entry1 = tkinter.Entry(frame1,width=20)
entry2 = tkinter.Entry(frame1,width=20,show='*')
button1 = tkinter.Button(frame1, text='提交',command=lambda:LoginUser(entry1,entry2))
button2 = tkinter.Button(frame1,text="退出",command=lambda:window.destroy())
txt1.place(relx=0.2,rely=0.2)
txt2.place(relx=0.2, rely=0.4)
button1.place(relx=0.35,rely=0.6)
button2.place(relx=0.55,rely=0.6)
entry1.place(relx=0.35,rely=0.2)
entry2.place(relx=0.35,rely=0.4)
# 第二页
frame2 = tkinter.Frame()
note.add(frame2, text='管理员登录')
txt11 = tkinter.Label(frame2, text='用户名')
txt22 = tkinter.Label(frame2, text='密码')
entry11 = tkinter.Entry(frame2, width=20)
entry22 = tkinter.Entry(frame2, width=20, show='*')
button11 = tkinter.Button(frame2, text='提交', command=lambda: LoginAdmin(entry11, entry22))
button22 = tkinter.Button(frame2, text="退出", command=lambda: window.destroy())
txt11.place(relx=0.2, rely=0.2)
txt22.place(relx=0.2, rely=0.4)
button11.place(relx=0.35, rely=0.6)
button22.place(relx=0.55, rely=0.6)
entry11.place(relx=0.35, rely=0.2)
entry22.place(relx=0.35, rely=0.4)
# 窗口循环
window.mainloop()
以上是关于Python-分角色登录界面(tkinterpymysql)的主要内容,如果未能解决你的问题,请参考以下文章
Life In Changsha College- 第三次冲刺