Python-分角色登录界面(tkinterpymysql)

Posted 小狐狸FM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python-分角色登录界面(tkinterpymysql)相关的知识,希望对你有一定的参考价值。

前言

  • 使用到的库有tkinterpymysqlpymysql主要用于连接mysql数据库
    pymysqlpython3中使用,mysqldbpython2中使用。
  • 实现一下在mysql数据库中查询用户名和密码信息登录的功能。
    重置输入框的功能没弄出来,希望大佬可以指点一下

相关介绍

Python3 MySQL 数据库连接 - PyMySQL 驱动

Python-GUI界面设计(tkinter)

一、准备阶段

[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)的主要内容,如果未能解决你的问题,请参考以下文章

java web如何实现不同角色登录不同界面

MySQL 数据库,如何分角色权限建表?

Life In Changsha College- 第三次冲刺

JAVAEE——BOS物流项目12:角色用户管理,使用ehcache缓存,系统菜单根据登录人展示

在jsp页面中如何获取到当前登录用户的角色id

Apache Shiro 决定登录后使用啥角色