Python 使用tkinter设计Windows网页或应用的用户注册登录界面

这篇具有很好参考价值的文章主要介绍了Python 使用tkinter设计Windows网页或应用的用户注册登录界面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇:Python 自定义模块和包设计英语生词本(文件版)-CSDN博客

紧接上一篇博文,当我们熟练掌握自定义模块和包、掌握文件的的读取与写入、掌握正则表达式内置模块"re"、掌握GUI(图形界面)的部分组件后,接着我们将要以上的知识点结合起来,设计一个GUI(图形界面)登录界面。且看我如何一步两步......完成设计吧。

一、作品展示

1.运行结果

python登录界面设计,Python 入门案例,pythonpython登录界面设计,Python 入门案例,python

2.设计代码

"""
    账户密码登录
"""

# 通配符 '*'
__all__ = ['main']


# 获取验证码
def getVerifyCode(object):
    from 小功能包.验证码 import verify_code
    object.set(verify_code.verify_code(6))
    return verify_code.verify_code(6)


# 读取文件数据
def readFileData():
    from 小功能包.文件操作 import ReadFileData as read
    data = read.readlinesData(userDataPath, [])

    if data != '文件不存在':
        global userData
        userData = data


# 查找账户
def findID(id):
    readFileData()  # 读取文件数据

    # 查找账户
    for i in userData:
        if i.strip('\n').split(' ')[0] == id:
            return i.strip('\n').split(' ')

    return None


# 账户登录
def IDenter(ID, password, inputVerify, verifyCode, label):
    # print(ID.get(), password.get(), inputVerify.get(), verifyCode.get(), label.get())
    # 查找账户是否存在
    data = findID(ID.get())

    # 校对账户
    if data:
        # 校对密码
        if data[1] == password.get():
            # 校对验证码
            import re
            if re.findall(verifyCode.get(), inputVerify.get(), re.I):
                label.set('登录成功')
                # 初始化输入框
                ID.set('')
                password.set('')
                inputVerify.set('')
            # 验证码输入错误
            else:
                label.set('验证码输入错误')
                inputVerify.set('')
        # 密码输入错误
        else:
            label.set('密码输入错误')
            password.set('')
    # 账户输入错误
    else:
        label.set('账户名输入错误')
        ID.set('')

    getVerifyCode(verifyCode)   # 更新验证码


# 账户注册
def IDregister(ID, password, inputVerify, verifyCode, label):
    # print(ID.get(), password.get(), inputVerify.get(), verifyCode.get(), label.get())

    # 查找账户是否存在
    data = findID(ID.get())

    # 防止账户密码输入特殊字符空格' '
    import re
    IDdata = re.findall(r'\W', ID.get())
    passwordData = re.findall(r'\W', password.get())
    if ' ' in IDdata:
        label.set('账户名不能使用空格')
        ID.set('')
    elif ' ' in passwordData:
        label.set('密码不能使用空格')
        password.set('')

    # 防止输入内容为空''
    elif not ID.get():
        label.set('账户名不能为空')
    elif not password.get():
        label.set('密码不能为空')

    # 校对账户
    elif not data:
        # 校对验证码
        import re
        if re.findall(verifyCode.get(), inputVerify.get(), re.I):
            # 保存到列表中
            userData.append(f'{ID.get()} {password.get()}')

            label.set('账户注册成功')
            # 初始化输入框
            ID.set('')
            password.set('')
            inputVerify.set('')

            # 更新文件数据
            from 小功能包.文件操作 import WriteFileData
            WriteFileData.writelinesData(userDataPath, userData)

        # 验证码输入错误
        else:
            label.set('验证码输入错误')
            inputVerify.set('')

    # 账户输入错误
    else:
        label.set('该账户名已注册')
        ID.set('')

    getVerifyCode(verifyCode)   # 更新验证码


# 全局变量
userDataPath = '.\\..\\user data\\data.txt'
userData = []


# 主函数
def main():
    import tkinter as tk
    base = tk.Tk()              # 新建窗口
    base.title('账户密码登录')    # 标题

    # 全局变量
    labelData = tk.StringVar()        # 标签数据
    ID = tk.StringVar()               # 账号数据
    password = tk.StringVar()         # 密码数据
    inputVerifyCode = tk.StringVar()  # 输入验证码数据
    verifyCode = tk.StringVar()       # 验证码

    # 初始化设置
    verifyCode.set(getVerifyCode(verifyCode))    # 初始验证码
    labelData.set('欢迎来到【周华2022博客】客户端')

    # 标签提示语
    textLabel = tk.Label(base, textvariable=labelData, height=2)      # 文本标签
    textLabel.pack()

    # 账号    ----------------------------------------------------------------------------
    IDframe = tk.Frame(base, pady=8)      # 账号框架
    IDframe.pack()
    # 账号标签
    IDlabel = tk.Label(IDframe, text='账户')
    IDlabel.pack(side=tk.LEFT)
    # 账号文本框
    IDentry = tk.Entry(IDframe, text=ID, highlightthickness=1)
    IDentry.pack(side=tk.RIGHT)

    # 密码    -----------------------------------------------------------------------------
    passwordFrame = tk.Frame(base, pady=8)  # 密码框架
    passwordFrame.pack()
    # 密码标签
    passwordLabel = tk.Label(passwordFrame, text='密码')
    passwordLabel.pack(side=tk.LEFT)
    # 密码文本框
    passwordEntry = tk.Entry(passwordFrame, text=password, highlightthickness=1, show='*')
    passwordEntry.pack(side=tk.RIGHT)

    # 验证码   -----------------------------------------------------------------------------
    verifyFrame = tk.Frame(base, pady=6)  # 验证码框架
    verifyFrame.pack()
    # 验证码标签
    verifyLabel = tk.Label(verifyFrame, text='验证码')
    verifyLabel.pack(side=tk.LEFT)
    # 验证码文本框
    verifyEntry = tk.Entry(verifyFrame, text=inputVerifyCode, highlightthickness=1, width=9)
    verifyEntry.pack(side=tk.LEFT)
    # 验证码更新1
    image = tk.PhotoImage(file='.\\..\\photo\\刷新.png')
    updataButton = tk.Button(verifyFrame, textvariable=verifyCode, relief=tk.FLAT)
    updataButton.config(image=image, width=20, height=20)
    updataButton.config(command=lambda: getVerifyCode(verifyCode))
    updataButton.pack(side=tk.LEFT)
    # 验证码更新2
    verifyUpdata = tk.Button(verifyFrame, textvariable=verifyCode, relief=tk.FLAT)
    verifyUpdata.config(command=lambda: getVerifyCode(verifyCode), width=7)
    verifyUpdata.pack()

    # 按钮    ------------------------------------------------------------------------------
    buttonFrame = tk.Frame(base, padx=60, pady=10)  # 按钮框架
    buttonFrame.pack()
    # 账号登录按钮
    enterButton = tk.Button(buttonFrame, text='登录')
    enterButton.config(command=lambda: IDenter(ID, password, inputVerifyCode, verifyCode, labelData))
    enterButton.pack(side=tk.LEFT)
    # 空白标签(隔开按钮)
    blankLabel = tk.Label(buttonFrame, width=6)
    blankLabel.pack(side=tk.LEFT)
    # 账号注册按钮
    registerButton = tk.Button(buttonFrame, text='注册')
    registerButton.config(command=lambda: IDregister(ID, password, inputVerifyCode, verifyCode, labelData))
    registerButton.pack()

    base.mainloop()             # 循环运行窗口


# 代码测试
if __name__ == '__main__':
    main()

3.模块设计,当前小程序只用了两个模块:文件操作.py、验证码.py

python登录界面设计,Python 入门案例,python

① 模块一:文件操作.py

"""
    文件操作模块
"""


# 通配符'*'变量定义
__all__ = ['main']


# 获取绝对路径    ------------------------------------------------------------------------
__all__.append('getAbsPath')    # 通配符'*'添加元素
def getAbsPath(path):
    import os, sys
    return os.path.abspath(sys.path[0]+path)


# 新建目录文件    ------------------------------------------------------------------------
__all__.append('makeDirFile')    # 通配符'*'添加元素
def makeDirFile(path):

    # 路径分割
    dirPath = ''
    for i in path.split('\\')[:-1:]:
        dirPath += i + '\\'

    makeDir(dirPath)    # 新建目录
    makeFile(path)      # 新建文件


# 新建目录  -----------------------------------------------------------------------------
__all__.append('makeDir')    # 通配符'*'添加元素
def makeDir(path):
    path = getAbsPath(path)     # 获取绝对路径

    # 判断文件是否存在,否则新建目录
    import os
    if not os.path.exists(path):
        os.mkdir(path)


# 新建文件  -----------------------------------------------------------------------------
__all__.append('makeFile')    # 通配符'*'添加元素
def makeFile(path):
    path = getAbsPath(path)     # 获取绝对路径

    # 判断文件是否存在,否则新建文件
    import os
    if not os.path.exists(path):
        file = open(file=path, mode='w')
        file.close()


# 读取文件数据    =========================================================================
__all__.append('ReadFileData')    # 通配符'*'添加元素
class ReadFileData:
    # 构造方法
    def __init__(self):
        pass

    # 读取文件行数据,返回读取的数据   --------------------------------------------------------
    @classmethod
    def readlinesData(cls, path, container):
        data = container
        if container == list():     # 变量赋值
            data = []

        path = getAbsPath(path)     # 获取绝对路径

        # 判断文件是否存在
        import os
        if not os.path.exists(path):
            return '文件不存在'

        # 读取文件数据
        with open(path, encoding='utf-8') as file:
            for i in file:
                if container == str():  # 字符串容器
                    data += i
                elif container == list():  # 列表容器
                    data.append(i)
                else:
                    print('存储读取数据类型必须为字符串str()或者列表list()')

        return data

    # 读取文件行数据,返回读取的数据   --------------------------------------------------------
    @classmethod
    def readSplitData(cls, path, split, container):
        if container == list():
            data = []
        elif container == dict():
            data = dict()

        path = getAbsPath(path)     # 获取绝对路径

        # 判断文件是否存在
        import os
        if not os.path.exists(path):
            return '文件不存在'

        # 读取文件数据
        with open(path, encoding='utf-8') as file:
            for i in file:
                if container == list():
                    data.append(i.split(split))
                elif container == dict():
                    data[i.split(split)[0]] = i.split(split)[1::]
                else:
                    print('存储读取数据类型必须列表list()或者字典dict()')

        return data


# 写入文件数据    =========================================================================
__all__.append('WriteFileData')    # 通配符'*'添加元素
class WriteFileData:
    # 构造方法
    def __init__(self):
        pass

    # 写入文件行数据   --------------------------------------------------------------------
    @classmethod
    def writelinesData(cls, path, data):
        makeDirFile(path)           # 新建目录和文件
        path = getAbsPath(path)     # 获取绝对路径

        # 写入文件数据
        with open(path, 'w', encoding='utf-8') as file:
            if type(data) == str:
                file.write(data)
                if data[-1] != '\n':
                    file.write('\n')
            elif type(data) == list:
                for i in data:
                    file.write(i)
                    if i[-1] != '\n' and i == data[-1]:
                        file.write('\n')
            else:
                print('写入数据类型必须为字符串str()或者列表list()')

    # 写入文件行数据   --------------------------------------------------------------------
    @classmethod
    def writeSplitData(cls, path, data, split):
        makeDirFile(path)           # 新建目录和文件
        path = getAbsPath(path)     # 获取绝对路径

        # 写入文件数据
        with open(path, 'w', encoding='utf-8') as file:
            if type(data) == list:
                for i in data:
                    for j in i:
                        file.write(j)
                        if i[-1] != j:
                            file.write(split)
                        if j[-1] != '\n' and i[-1] == j:
                            file.write('\n')

            elif type(data) == dict:
                for i, j in data.items():
                    file.write(i)
                    for k in j:
                        file.write(split + k)
                        if k == j[-1] and k[-1] != '\n':
                            file.write('\n')

            else:
                print('写入数据类型必须为列表list()或者字典dict()')


# 主函数   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def main():
    print(ReadFileData.readlinesData('.\\..\\十六进制颜色码.txt', ''))
    print(ReadFileData.readSplitData('.\\..\\十六进制颜色码.txt', '、', dict()))
    data = ReadFileData.readlinesData('.\\..\\十六进制颜色码.txt', '')
    WriteFileData.writelinesData('.\\..\\123\\456.txt', data)
    data2 = ReadFileData.readSplitData('.\\..\\十六进制颜色码.txt', '、', dict())
    WriteFileData.writeSplitData('.\\..\\456\\789.txt', data2, '(*)')


# 代码测试
if __name__ == '__main__':
    main()
else:
    print(f'导入"{__name__}"模块')

② 模块二:验证码.py

"""
    获取验证码模块
"""


# 定义此属性是为了方便使用通配符‘*’
__all__ = ['main']


# 获取验证码     ===================================================================
__all__.append('verify_code')    # 通配符'*'添加元素
class verify_code:
    __int_list = []     # 用于存储数字
    __str_list = []     # 用于存储字母
    __all_list = []     # 用于存储数字和字母

    # 列表添加元素    --------------------------------------------------------------
    @classmethod
    def __list_append(cls):
        # 初始化清空
        cls.__int_list = []
        cls.__str_list = []
        cls.__all_list = []

        # 获取0-9数字
        for i in range(10):
            cls.__int_list.append(str(i))

        # 获取26个大小写字母
        for i in range(26):
            cls.__str_list.append(chr(ord('a')+i))
            cls.__str_list.append(chr(ord('A')+i))

        # 把数字和字母列表集合到一起
        for i in range(5):
            cls.__all_list.extend(cls.__int_list)

        cls.__all_list.extend(cls.__str_list)

    # 获取列表元素    --------------------------------------------------------------
    @classmethod
    def get_list_element(cls, list, int):
        import random
        code = ''
        for i in range(int):
            code += random.choice(list)

        return code

    # 纯获取数字验证码  -------------------------------------------------------------
    @classmethod
    def int_sequence(cls, int=6):
        cls.__list_append()     # 列表添加元素

        # 获取列表的元素
        return cls.get_list_element(cls.__int_list, int)

    # 获取纯字母验证码  -------------------------------------------------------------
    @classmethod
    def str_sequence(cls, int=6):
        cls.__list_append()     # 列表添加元素

        # 获取列表的元素
        return cls.get_list_element(cls.__str_list, int)

    # 获取数字和字母验证码    --------------------------------------------------------
    @classmethod
    def verify_code(cls, int=6):
        cls.__list_append()     # 列表添加元素

        # 获取列表的元素
        return cls.get_list_element(cls.__all_list, int)


# 主函数   ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def main():
    print(verify_code.int_sequence())
    print(verify_code.str_sequence())
    print(verify_code.verify_code())


# 代码测试  ==========================================================================
if __name__ == '__main__':
    main()

else:
    print(f'导入"{__name__}"模块')


4.图片文件:刷新.png(大小:20x20)

python登录界面设计,Python 入门案例,python

作者:周华

创作日期:2023/10/26文章来源地址https://www.toymoban.com/news/detail-780150.html

到了这里,关于Python 使用tkinter设计Windows网页或应用的用户注册登录界面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python应用】tkinter简介

    tkinter是Python自带的GUI库。 tkinter的全称是Tk Interface。 其中Tk是开发桌面应用的GUI工具库,它是Tcl的标准GUI,而Tcl全称Tool Command Language,是一种动态编程语言,可用于桌面应用开发。关于Tk和Tcl,可以在https://www.tcl.tk/查看到更多的内容,这里不多做介绍。 Tk和Tcl并不是Python的一

    2024年02月09日
    浏览(27)
  • 网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(二)前后端实现用户的登录和注册功能【用户模块】

    1. 用户id 2. 用户名 3. 密码 4. 天梯积分 5. 总场数 6. 获胜场数 和数据库的数据一一对应 1. 连接数据库(application.yml连接数据库) 这个可以直接赋值代码 2. 创建UserMapper的Java接口(interface UserMapper) 创建接口,在UserMapper.xml实现 在model中创建 需要实现@Mapper注释 3. 创建UserMappe

    2024年02月13日
    浏览(36)
  • 安卓studio 个人课设项目:“这个app“——实现注册登录,显示用户信息功能,并跳转对应网页

    目录 目录 功能说明  登录页面 注册页面 登录后界面 点击头像出现侧滑界面,并显示用户信息 点击编辑按钮进入信息编辑页面  保存后返回  用户名已更改 跳转网页 相关代码 布局 登录界面  注册界面  信息显示界面  主界面 实现侧滑布局  信息编辑界面 网页显示界面 

    2023年04月26日
    浏览(33)
  • (三)Python-tkinter桌面应用(爱心雨)

    我们已经了解到tkinter可以制作爱心,弹幕,为了能让他看起来更加的充满心意,于是,我们决定将他制作为爱心雨。让它看起来更加的特别,达到特别的需求。 (一)Python-tkinter桌面应用开发(多弹窗) (二)Python-tkinter桌面应用(桌面上的弹幕) 我们要让我们的爱心移动

    2023年04月20日
    浏览(69)
  • Python编程:Tkinter图形界面设计(1)

    目录 一、Tkinter的程序框架  二、窗口内容 2.1 窗口的几何尺寸 2.2 窗口的摆放位置 2.3  实验代码 2.4 控件管理 三、控件编程 窗口的生成和窗口的呈现,用Tk()和mainloop()包括起来,中间程序是附着在窗口的内部部件。 ​ 窗口的内容,是最丰富的细节包括:1、几何尺寸 2、按钮

    2024年02月07日
    浏览(30)
  • 【python】tkinter程序打包成exe可执行文件 全流程记录(windows系统)

    【需求背景】 Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。 我用python写了一个可视化界面,利用算法计算患COVID-19的概率。 现在需要将Python文件编译成exe文件,这样可以直接在Windows上运行,不需要再依赖Python环境,可以复制到其他电脑中直接

    2024年02月01日
    浏览(60)
  • 【Python】线程threading与GUI窗口tkinter结合应用

    Python的threading模块是一个强大的工具,它提供了高级别的线程编程接口。通过这个模块,Python程序员可以在应用程序中实现多线程并发执行。 线程(Thread)是程序执行流的最小单元,被包涵在进程之中,是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不

    2024年01月19日
    浏览(38)
  • 毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——前言

    资源链接:https://download.csdn.net/download/m0_46573428/87796553 前言:毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——前言_人工智能技术小白修炼手册的博客-CSDN博客 首页与导航:毕业设计:Vue3+FastApi+Python+Neo4j实现主题知识图谱网页应用——前端:首页与导航栏_人工智

    2024年02月14日
    浏览(35)
  • Android用户注册界面设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 提示:以下是本篇文章正文内容,下面案例可供参考 根据前面的学习内容,设计如图1所示的用户注册界面,要求如下: (1)将应用的名称、姓名编辑框的输入提示中的“张三”,改为自己的姓名; (

    2023年04月12日
    浏览(42)
  • C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

    初步掌握Windows应用程序的设计方法。 掌握常用窗体控件的使用方法。 1、设计一个Windows应用程序,创建一个用于添加学生个人基本信息的窗体,窗体下方法同时滚动信息“天行健,君子以自强不息!”。   要示如下: 如图1所示,设计窗体界面控件的布局 图1 学生信息管理

    2024年02月10日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包