Python 开发实现登陆和注册模块

news/2024/5/18 13:16:42

Python 开发实现登陆和注册模块

一、案例介绍

本例设计一个用户登录和注册模块,使用Tkinter框架构建界面,主要用到画布、文本框、按钮等组件。涉及知识点:Python Tkinter界面编程、pickle数据存储。本例实现了基本的用户登录和注册互动界面,并提供用户信息存储和验证。

pickle是python语言的一个标准模块,安装python后已包含pickle库,不需要单独再安装。pickle模块实现了基本的数据序列化和反序列化。通过pickle模块的序列化操作能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象。

二、案例效果

运行启动欢迎界面

image-20240422142127797

提示注册界面

image-20240422142208990

注册界面

image-20240422142228141

其他功能实现界面欢迎大家尝试自己实现

三、案例代码

3.1 导入库文件

import tkinter as tk
import pickle
import tkinter.messagebox
from PIL import Image, ImageTk

3.2 设置欢迎界面

window = tk.Tk()  # 建立一个窗口
window.title('欢迎登录')
window.geometry('450x300')  # 窗口大小为300x200# 画布
canvas = tk.Canvas(window, height=200, width=900)
# 加载图片
im = Image.open("注册&登陆_image/01.png")
image_file = ImageTk.PhotoImage(im)
#image_file = tk.PhotoImage(file='images/01.gif')
image = canvas.create_image(100, 40, anchor='nw', image=image_file)
canvas.pack(side='top')# 两个文字标签,用户名和密码两个部分
tk.Label(window, text='用户名').place(x=100, y=150)
tk.Label(window, text='密  码').place(x=100, y=190)var_usr_name = tk.StringVar()  # 讲文本框的内容,定义为字符串类型
var_usr_name.set('name@163.com')  # 设置默认值
var_usr_pwd = tk.StringVar()# 第一个输入框-用来输入用户名的。
# textvariable 获取文本框的内容
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=150)
# 第二个输入框-用来输入密码的。
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=190)

3.3 设置登陆功能

def usr_login():usr_name = var_usr_name.get()usr_pwd = var_usr_pwd.get()try:with open('usrs_info.pickle', 'rb') as usr_file:usrs_info = pickle.load(usr_file)except FileNotFoundError:with open('usrs_info.pickle', 'wb') as usr_file:usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='欢迎光临', message=usr_name + ': 请进入个人首页,查看最新资讯')else:tk.messagebox.showinfo(message='错误提示:密码不对,请重试')else:is_sign_up = tk.messagebox.askyesno('提示', '你还没有注册,请先注册')print(is_sign_up)if is_sign_up:usr_sign_up()

3.4 设置注册功能

def usr_sign_up():def sign_to_Mofan_Python():np = new_pwd.get()npf = new_pwd_confirm.get()nn = new_name.get()# 上面是获取数据,下面是查看一下是否重复注册过with open('usrs_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)if np != npf:tk.messagebox.showerror('错误提示', '密码和确认密码必须一样')elif nn in exist_usr_info:tk.messagebox.showerror('错误提示', '用户名早就注册了!')else:exist_usr_info[nn] = npwith open('usrs_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('欢迎', '你已经成功注册了')window_sign_up.destroy()# 点击注册之后,会弹出这个窗口界面。window_sign_up = tk.Toplevel(window)window_sign_up.title('欢迎注册')window_sign_up.geometry('360x200')  # 中间是x,而不是*号# 用户名框--这里输入用户名框。new_name = tk.StringVar()new_name.set('name@163.com')  # 设置的是默认值tk.Label(window_sign_up, text='用户名').place(x=10, y=10)entry_new_name = tk.Entry(window_sign_up, textvariable=new_name)entry_new_name.place(x=100, y=10)# 新密码框--这里输入注册时候的密码new_pwd = tk.StringVar()tk.Label(window_sign_up, text='密  码').place(x=10, y=50)entry_usr_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show='*')entry_usr_pwd.place(x=100, y=50)# 密码确认框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='确认密码').place(x=10, y=90)entry_usr_pwd_confirm = tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*')entry_usr_pwd_confirm.place(x=100, y=90)btn_confirm_sign_up = tk.Button(window_sign_up, text=' 注  册 ', command=sign_to_Mofan_Python)btn_confirm_sign_up.place(x=120, y=130)

3.5 实现注册、登陆

# 创建注册和登录按钮
btn_login = tk.Button(window, text=' 登  录 ', command=usr_login)
btn_login.place(x=150, y=230)  # 用place来处理按钮的位置信息。
btn_sign_up = tk.Button(window, text=' 注  册 ', command=usr_sign_up)
btn_sign_up.place(x=250, y=230)window.mainloop()

总结

本例设计一个用户登录和注册模块,使用Tkinter框架构建界面,主要用到画布、文本框、按钮等组件。是一个比较综合的 python 基础开发案例,希望对你有所帮助。


http://www.mrgr.cn/p/51243304

相关文章

kubebuilder(2)创建项目及初始化

一个demo项目来了解kubebuilder的项目结构 初始化项目 mkdir demo-operator cd demo-operator kubebuilder init --domain demo.com --repo demo.com/tutorial 这一步创建了 Go module 工程基本的模板文件,引入了必要的依赖 如果不用--repo参数,也可…

渗透测试-信息收集

“感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友。您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!🚀✨”domain:"kuaishou.com" AND port:"80" 360网络空间检索语句(…

设计模式——模板方法

1)模板方法模式(Template Method Pattem),又叫模板模式(Template Patern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 2)简单说,模板方法模式 定义一个操作中…

首发!Llama3纯本地部署攻略!中文方法!

引言 llama3在4月19日刚刚发布,官方的对比结果中在开源模型中堪称世界第一,整好周六日有时间,在魔搭社区上测试一下 一、启动环境 登录魔搭社区,到自己的机器资源,可以看到,可选的机器配置, …

信息收集-cnblog

信息收集 domain:"kuaishou.com" AND port:"80" 360网络空间检索语句(domain="qianxin.com")&&ip.port="80" 鹰图曾记得某位大佬说过“渗透测试的本质就是信息收集”,那么信息收集,我们到底该收集啥?信息收集是…

马蜂窝景点评论(以恭王府为例)

1. python部分 马蜂窝.py # -*- coding:utf-8 -*-# @Time : 2024/04/15 18:34 # @Author : 快乐的小猴子 # @Version : # @Function : import subprocess from functools import partial subprocess.Popen = partial(subprocess.Popen, encoding=utf-8) import execjs import r…

DRF之视图组件

【四】视图组件图源:drf(详细)_51CTO博客_什么是drf【1】两个视图基类 【1.1】APIView请在【View】中查看详细【1.2】GenericAPIView 【1.2.1】常用类属性基本设置:以下属性控制着基本视图的行为。queryset用于从视图返回对象的查询结果集。 通常,你必须设置此属性或者重写 g…

Spring Cloud Gateway详细介绍以及实现动态路由

一. 简介 Spring Cloud Gateway This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to …

JavaBean知识

“感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友。您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!🚀✨”JavaBean 使用前端HTML代码和Java 代码分离,业务逻辑单独封装,然后在JSP页面中调用,就降…

JavaBean-cnblog

JavaBean 使用前端HTML代码和Java 代码分离,业务逻辑单独封装,然后在JSP页面中调用,就降低了耦合度,让JSP更简介,更易维护复用,这样的类就是一个JavaBean组件类JavaBean分为可视化组件和非可视化组件两种,可视化组件可以是简单的GUI元素,如按钮 文本框可以是报表组件,非可视化没…

ctf知识积累

(1)url解码:python解码函数:from urllib.parse import unquote(quote:编码)url_code=""url_code1=unquote(url_code)print(url_code1)Edge 浏览器URL解码:开发人员工具输入:decodeURIComponent(‘’)(2)Unicode解码:from urllib.parse import unquote_plu…

机器人实验室CNRS-AIST JRL, IRL介绍

一、背景 作为搞机器人方向的学生,必须时常关注国际上顶尖实验室的研究成果,以免自己做的方向out,除了大家耳熟能详的Boston Dynamics,还有许多非常厉害的机器人实验室值得我们关注,如日本的CNRS-AIST JRL, IRL实验室…

数据结构PT1——线性表/链表

1:顺序存储实现(数组实现) Data: a1 a2 .....ai ai1 .... an .... typedef struct LNode *List; //指向LNode的指针,这是typedef的,你可以随时声明,而不加typedef只是创建一个 struct LNode{ //结构体成员ElementT…

初中中考阅读理解难题一网打尽!句子结构深度解析+答案揭秘,助你轻松冲刺中考高分!-009

PDF格式公众号回复关键字:ZKYDT009原文1 How did the lot look at the beginning of the story? 解析 1 How 怎么样 did ,the lot 场地, look 看起来,at the beginning of the story?在故事的开头 故事开始时,那个场地看起来怎么样? 2 This place looks like a dump. 这…

30 天精通 RxJS (28):Scheduler 基本观念

不晓得读者们还记不记得,我们在前面的文章中有提到 Scheduler 是为了解决 RxJS 衍生的最后一个问题,而我们现在就在揭晓这个谜底。本系列仅作为学习记录所用,摘录自30 天精通 Rxjs!强烈推荐!膜拜大佬!

sublime text的json快捷键

系统 macos 配置 sublime Text->Settings->Key Bindings 效果 可以看到,按:shiftcommandp,会出现快捷键窗口,打pretty,会出现Format JSON,最右侧显示⌘J,说明只需要macos的⌘和J同时按…

2024红明谷杯——Misc 加密的流量

2024红明谷杯——Misc 加密的流量 写在前面: 这里是贝塔贝塔,照例来一段闲聊 打比赛但赛前一波三折,又是成功签到的一个比赛 说起来比赛全名叫红明谷卫星应用数据安全场景赛,但好像真的跟卫星的关系不大,没有bin方…

顺序表和链表的练习题

顺序表 题目一:题目分析: 该题目需要先对顺序表进行遍历至元素x正确插入位置,再对顺序表完成插入操作。因此涉及到for循环与if语句的使用 代码实现 /******************************************************************** * * name : SequenceList_insert * function : …

JZ8 二叉树的下一个结点

#include <cstddef> class Solution { public:vector<TreeLinkNode*> nodes; //用户得到的输入只有一个 子树根节点TreeLinkNode* GetNext(TreeLinkNode* pNode) {TreeLinkNode* root = pNode;//获取根节点while(root->next )root = root->next;//中序遍历用…

没闲着系列 20

现已将dashboard页面加入了需求的图表和点击panel. 如下图:且现在这个图表是根据迭代出现的,及哪个迭代中出现了多少个需求的story(包括变更、新增、删减、确认), 之后要做的就是将breakdown story和issues连起来,当然在story需求中也可以直接更改状态到完成,而无需创建issues.…