脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - Python+Tkinter简单实现注册登录功能

Python+Tkinter简单实现注册登录功能

2022-09-14 13:40沧海黎明 Python

这篇文章主要为大家详细介绍了Python+Tkinter简单实现注册登录功能,连接本地MySQL数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Python+Tkinter简单实现注册登录功能的具体代码,供大家参考,具体内容如下

Python+Tkinter简单实现注册登录功能

Python+Tkinter简单实现注册登录功能

Python+Tkinter简单实现注册登录功能

Python+Tkinter简单实现注册登录功能

项目结构:

Python+Tkinter简单实现注册登录功能

源代码:

# -*- coding: utf-8 -*-
"""
@date:  2022/01/09 17:40
@author: Anker
@python:v3.10
"""
 
import tkinter as tk
import tkinter.messagebox
import pymysql
 
# 定义要执行的创建表的SQL语句
test_sql = """
                CREATE TABLE IF NOT EXISTS user(
                id INT auto_increment PRIMARY KEY,
                name varchar(20) not null,
                password varchar(20) not null
                )ENGINE=innodb DEFAULT CHARSET=utf8;
           """
 
# 登录窗口
window = tk.Tk()
window.title("学生考试系统")
window.geometry("800x500")
 
# 登录背景图片
canvas = tk.Canvas(window, height=1920, width=1080)
login_background = tk.PhotoImage(file="./view.png")
login_image = canvas.create_image(0, 0, anchor="nw", image=login_background)
canvas.pack(side="top")
 
# 用户名密码标签
tk.Label(window, text="用户名:", bg="yellow").place(x=300, y=200)
tk.Label(window, text="密   码:", bg="yellow").place(x=300, y=250)
 
# 用户名输入框
var_user_name = tk.StringVar()
entry_user_name = tk.Entry(window, textvariable=var_user_name)
entry_user_name.place(x=370, y=200)
 
# 密码输入框
var_user_pwd = tk.StringVar()
entry_user_pwd = tk.Entry(window, textvariable=var_user_pwd, show="*")
entry_user_pwd.place(x=370, y=250)
 
 
# 登录函数
def user_login():
    # 输入框获取用户名密码
    user_name = var_user_name.get()
    user_password = var_user_pwd.get()
    # 连接test_sql数据库
    conn = pymysql.connect(host="localhost", user="root", password="123456", database="test_sql", charset="utf8")
    curs = conn.cursor()
    # 执行SQL语句,创建user数据表
    curs.execute(test_sql)
    # 执行SQL语句,从user数据表中查询name和password字段值
    curs.execute("SELECT name,password FROM user")
    # 将数据库查询的结果保存在result中
    result = curs.fetchall()
    # fetchone()函数它的返回值是单个的元组, 也就是一行记录, 如果没有结果, 那就会返回null
    # fetchall()函数它的返回值是多个元组, 即返回多个行记录, 如果没有结果, 返回的是()
    # assert result, "数据库无该用户信息"   # 添加断言,判断数据库有无该用户信息,没有就直接断言错误
 
    # 登录账号操作
    name_list = [it[0] for it in result]    # 从数据库查询的result中遍历查询元组中第一个元素name
    # 判断用户名或密码不能为空
    if not(user_name and user_password):
        tk.messagebox.showwarning(title="警告", message="用户名或密码不能为空")
    # 判断用户名和密码是否匹配
    elif user_name in name_list:
        if user_password == result[name_list.index(user_name)][1]:
            tk.messagebox.showinfo(title="欢迎您", message="       登录成功!
当前登录账号为:" + user_name)
            selection()
        else:
            tk.messagebox.showerror(title="错误", message="密码输入错误")
    # 账号不在数据库中,则弹出是否注册的框
    else:
        is_signup = tk.messagebox.askyesno(title="提示", message="该账号不存在,是否现在注册?")
        if is_signup:
            user_register()
 
 
# 注册函数
def user_register():
    # 确认注册函数
    def register_confirm():
        # 获取输入框内的内容
        name = new_name.get()
        password = new_password.get()
        password_confirm = new_password_confirm.get()
        # 先在本地手动创建一个test_sql数据库,然后连接该数据库
        conn = pymysql.connect(host="localhost", user="root", password="123456", database="test_sql", charset="utf8")
        curs = conn.cursor()
 
        # 注册账号操作
        try:
            # 执行SQL语句,创建user数据表
            curs.execute(test_sql)
            # 向user数据表中插入语句
            insert_sql = "INSERT INTO user(name, password) VALUES ("%s", "%s")" % (name, password)
            # 读取user数据表中的name和password字段值
            read_sql = f"""select * from user where name = "{name}" and password = "{password}" """
            user_data = curs.execute(read_sql)
            # 判断注册账号和密码
            if not (name and password):
                tk.messagebox.showwarning(title="警告", message="注册账号或密码不能为空")
            elif password != password_confirm:
                tk.messagebox.showwarning(title="警告", message="两次密码输入不一致,请重新输入")
            else:
                if user_data.real:
                    tk.messagebox.showwarning(title="警告", message="该注册账号已存在")
                else:
                    curs.execute(insert_sql)
                    tk.messagebox.showinfo(title="恭喜您", message="      注册成功!
注册账号为:" + name)
                    print("数据插入成功")
            # 提交到数据库执行
            conn.commit()
            curs.close()
        except IOError:
            print("数据插入失败")
            conn.rollback()
        # 关闭数据库连接
        conn.close()
        window_sign_up.destroy()
 
    # 注册窗口
    window_sign_up = tk.Toplevel(window)
    window_sign_up.geometry("350x200")
    window_sign_up.title("欢迎注册")
 
    # 注册账号及标签、输入框
    new_name = tk.StringVar()
    tk.Label(window_sign_up, bg="green", text="注册账号:").place(x=50, y=10)
    tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)
 
    # 注册密码及标签、输入框
    new_password = tk.StringVar()
    tk.Label(window_sign_up, bg="green", text="密      码:").place(x=50, y=50)
    tk.Entry(window_sign_up, textvariable=new_password, show="*").place(x=150, y=50)
 
    # 重复密码及标签、输入框
    new_password_confirm = tk.StringVar()
    tk.Label(window_sign_up, bg="green", text="确认密码:").place(x=50, y=90)
    tk.Entry(window_sign_up, textvariable=new_password_confirm, show="*").place(x=150, y=90)
 
    # 确认注册按钮及位置
    bt_confirm_sign_up = tk.Button(window_sign_up, bg="green", text="确认注册", command=register_confirm)
    bt_confirm_sign_up.place(x=150, y=130)
 
 
# 选择题函数
def selection():
 
    def wrong():
        tk.messagebox.showerror(title="错误", message="抱歉,您答错了")
 
    def right():
        tk.messagebox.showinfo(title="提示", message="恭喜您,答对了")
 
    # 选择题窗口
    window_options = tk.Toplevel(window)
    window_options.geometry("350x200")
    window_options.title("选择题")
    # 在图形界面上创建一个标签label用以显示并放置
    var = tk.StringVar()  # 定义一个var用来将radiobutton的值和Label的值联系在一起.
    lab = tk.Label(window_options, bg="red", fg="white", width=50)
    lab.pack()
    lab.config(text="第1题:两个锐角均为60度的三角形是什么三角形()" + var.get())
    # 创建3个radiobutton选项,其中variable=var, value="A"表示:当鼠标选中其中一个选项,把value的值A放到变量var中,然后赋值给variable
    radio1 = tk.Radiobutton(window_options, text="A:锐角三角形", variable=var, value="A", command=wrong)
    radio1.pack()
    radio2 = tk.Radiobutton(window_options, text="B:钝角三角形", variable=var, value="B", command=wrong)
    radio2.pack()
    radio3 = tk.Radiobutton(window_options, text="C:等边三角形", variable=var, value="C", command=right)
    radio3.pack()
    radio4 = tk.Radiobutton(window_options, text="D:直角三角形", variable=var, value="D", command=wrong)
    radio4.pack()
 
 
# 注册和登录按钮
bt_register = tk.Button(window, bg="yellow", text="注册", command=user_register)
bt_register.place(x=380, y=300)
bt_login = tk.Button(window, bg="yellow", text="登录", command=user_login)
bt_login.place(x=440, y=300)
 
# 主循环
window.mainloop()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/weixin_43184774/article/details/122396401

延伸 · 阅读

精彩推荐
  • Pythonpytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作

    pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作

    这篇文章主要介绍了pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    SZU_Hadooper4532021-11-10
  • Python在Linux系统上通过uWSGI配置Nginx+Python环境的教程

    在Linux系统上通过uWSGI配置Nginx+Python环境的教程

    这篇文章主要介绍了在Linux系统上通过uWSGI配置Nginx+Python环境的教程,示例中为Ubuntu系统并且默认使用系统中自带的Python解释器,需要的朋友可以参考下...

    Python教程网2802020-08-05
  • PythonPython tkinter三种布局实例详解

    Python tkinter三种布局实例详解

    这篇文章主要介绍了Python tkinter三种布局实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...

    yaominghui19462020-05-08
  • Pythonpython3连接mysql获取ansible动态inventory脚本

    python3连接mysql获取ansible动态inventory脚本

    Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通过外部脚本获取主机列表。这...

    独孤清扬@AlbertCQY6542020-04-13
  • Pythontensorflow实现softma识别MNIST

    tensorflow实现softma识别MNIST

    这篇文章主要为大家详细介绍了tensorflow实现softma识别MNIST,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    freedom0985892021-01-21
  • Pythonpython接口自动化测试之接口数据依赖的实现方法

    python接口自动化测试之接口数据依赖的实现方法

    这篇文章主要介绍了python接口自动化测试之接口数据依赖的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    泰斯特test9722021-06-20
  • PythonPython爬虫框架Scrapy基本用法入门教程

    Python爬虫框架Scrapy基本用法入门教程

    这篇文章主要介绍了Python爬虫框架Scrapy基本用法,结合实例形式分析了xpath简单使用、xmlfeed模板、csvfeed模板及crawlfeed模板简单使用方法,需要的朋友可以参考...

    喷跑的豆子9092021-03-22
  • Pythonpython暴力解压rar加密文件过程详解

    python暴力解压rar加密文件过程详解

    这篇文章主要介绍了python解压rar加密文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    _qiufeng12742021-08-01