Python--实现用户登录功能(GUI图形界面)(连接Mysql数据库)

如果有小伙伴们想看Java语言实现用户登录功能,可以点击👉👉👉Java–用户登录/注册界面(连接Mysql数据库)并可以通过验证码登录

1 效果展示

登录界面
在这里插入图片描述
(2)动图展示
在这里插入图片描述

2 内容说明

(1)项目结构
在这里插入图片描述

(2)需要下载xampp软件
xampp软件下载
提取码:2255
在这里插入图片描述

3 主要代码

(1)连接数据库参数文件db.json

{
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "123456",
  "database": "数据库名称"
}

(2)连接mysql数据库db_conn.py

import json
from aifc import Error
import mysql.connector

'''
连接mysql数据库
'''
class DB_Conn:
    def __init__(self):
        # 从db.json中读取数据库连接参数
        with open('./dbconn/db.json', 'r') as f:
            db_config = json.load(f)
            self.host = db_config['host']
            self.port = db_config['port']
            self.username = db_config['username']
            self.password = db_config['password']
            self.database = db_config['database']
        self.conn = None

    def connect_database(self):
        try:
            self.conn = mysql.connector.connect(
                host=self.host,
                port=self.port,
                user=self.username,
                password=self.password,
                database=self.database
            )
            if self.conn.is_connected():
                print("连接成功")
        except Error:
            print("连接失败")
        return self.conn

(3)GUI登录界面设计login_gui.py

from tkinter import *
from tkinter import messagebox
from PIL import ImageTk, Image
from user import UserLogin

'''
登录窗体类
'''
class LoginForm:
    def __init__(self):

        self.root = Tk()
        self.root.title("用户登录")
        self.root.geometry("600x400+500+200")
        self.root.resizable(0, 0)  # 禁止手动伸缩窗口大小
        # 设置背景图
        self.background_image = ImageTk.PhotoImage(Image.open("./img/login.jpg"))
        self.background_label = Label(self.root, image=self.background_image)
        self.background_label.place(x=0, y=0, relwidth=1, relheight=1)
        # 设置图标logo
        self.logo_image = ImageTk.PhotoImage(file="./img/logo.jpg")
        self.root.iconphoto(False, self.logo_image)

        # 用户名标签和输入框
        self.username_label = Label(self.root, text="用户名:",font=("微软雅黑", 12, "bold"))
        self.username_label.place(x=200, y=70)

        self.var_username = StringVar()
        self.username_entry = Entry(self.root,textvariable=self.var_username,font=("微软雅黑", 12, "bold"),width=15)
        self.username_entry.place(x=270, y=70)

        # 密码标签和输入框
        self.password_label = Label(self.root, text="密   码:",font=("微软雅黑", 12, "bold"))
        # self.password_label.configure(background='systemTransparent')
        self.password_label.place(x=200, y=170)

        self.var_password = StringVar()
        self.password_entry = Entry(self.root, textvariable=self.var_password,show="*",font=("微软雅黑", 12, "bold"),width=15)
        self.password_entry.place(x=270, y=170)

        # 登录按钮
        self.login_button = Button(self.root, text="登录", command=self.login,width=10,font=("微软雅黑", 12, "bold"))
        self.login_button.place(x=150, y=270)
        # 重置按钮
        self.re_button = Button(self.root, text="重置", command=self.__re,width=10,font=("微软雅黑", 12, "bold"))
        self.re_button.place(x=350, y=270)

    def show(self): # 自定义函数show
        self.root.mainloop()  # 显示窗体

    def login(self):
        username = self.username_entry.get()
        password = self.password_entry.get()
        if username=="":
            messagebox.showerror("提示", "用户名不能为空")
            return
        if password=="":
            messagebox.showerror("提示", "密码不能为空")
            return
        try:
            user_login = UserLogin()
        except:
            messagebox.showerror("提示", "连接数据库失败")
            return
        result = user_login.login(username, password)

        if result:
            messagebox.showinfo("登录成功", "欢迎, " + username)
        else:
            messagebox.showerror("登录失败", "用户名或密码错误")

    def __re(self):
        self.var_username.set("")
        self.var_password.set("")

(4)用户登录操作user.py

from aifc import Error

from db_conn import DB_Conn

'''
用户登录操作类
'''
class UserLogin:
    def __init__(self):
        self.conn = DB_Conn().connect_database()

    def login(self, username, password):
        global result
        cursor = self.conn.cursor()
        # 查询数据库中是否存在指定的用户名和密码,注意传入参数的格式
        query = "SELECT * FROM user WHERE username=%s AND password=%s"
        try:
            cursor.execute(query, (username, password))
            result = cursor.fetchone()
        except Error as e:
            print(e)
        finally:
            cursor.close()
            self.conn.close()
        if result:
            return True
        else:
            return False

(5)程序执行入口mian.py

# 程序主入口
from login_gui import LoginForm
if __name__ == "__main__":
    login_form = LoginForm()
    login_form.show()

博主后记: 希望看到此篇博文的网友,如果发现有什么不对的地方,欢迎在下方留言指正!博主一定虚心接受并改正!大家一起共同进步。如果对你有所帮助,可以给博主一个赞👍。

想要获取源代码,可以直接访问我的Gitee仓库https://gitee.com/weh_coder/python-login-gui.git,记得给个star哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_WEH_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值