py注册登录界面
代码分析
-
引入tkinter库,并从中导入
messagebox模块。 -
read_users()函数用于读取存储用户信息的文本文件"users.txt"。它打开文件并逐行读取,将每行的用户名和密码以空格分隔后存储在一个列表中,最后返回该列表。 -
login(username, password)函数用于验证用户输入的用户名和密码是否与已存储的用户信息匹配。它调用read_users()函数获取所有用户信息,并遍历该列表。如果找到匹配的用户名和密码,返回True;否则返回False。 -
on_login_click()函数是登录按钮的回调函数。它首先获取用户输入的用户名和密码,然后进行非空检查。如果用户名或密码为空,将在界面显示"用户名或密码不能为空!"的错误提示信息。否则,调用login()函数进行验证。如果验证通过,弹出一个登录成功的消息框,并清空之前可能存在的错误提示信息;否则,在界面上显示"用户名或密码错误"的提示信息。 -
exit()函数是退出按钮的回调函数。它调用root.destroy()方法销毁GUI窗口,结束程序运行。 -
创建一个名为"登录界面"的GUI窗口对象
root。 -
创建一个欢迎标签
welcome_label,设置其文本为"欢迎登录系统",使用Helvetica字体,字号为16,并将其放置在第0行、第0和1列。 -
创建用户名标签
name、用户名输入框userid、密码标签ps、密码输入框userps,并使用网格布局放置在相应的位置。 -
创建登录按钮
lobutton,设置其文本为"登录",并将回调函数设置为on_login_click()。 -
创建退出按钮
exbutton,设置其文本为"退出",并将回调函数设置为exit()。 -
创建用于显示验证结果的标签
rebutton,使用result_var变量绑定该标签的文本内容。 -
使用网格布局将上述部件放置在相应的位置。
-
调用
root.mainloop()进入事件循环,等待用户交互。
import tkinter as tk
from tkinter import messageboxdef read_users():users = []with open("users.txt", "r") as file:for line in file:user_info = line.strip().split(' ')users.append(user_info)return usersdef login(username, password):users = read_users()for user in users:if user[0] == username:if user[1] == password:return Trueelse:return Falsereturn Falsedef on_login_click():username = userid.get()password = userps.get()if not username or not password:result_var.set("用户名或密码不能为空!")else:if login(username, password):messagebox.showinfo("登录成功", "登录成功!")result_var.set("") # Clear any previous error messageelse:result_var.set("用户名或密码错误")def exit():root.destroy()root = tk.Tk()
root.title("登录界面")welcome_label = tk.Label(root, text="欢迎登录系统", font=("Helvetica", 16))welcome_label.grid(row=0, column=0, columnspan=2, pady=10)name = tk.Label(root, text="用户名:")
userid = tk.Entry(root)
ps = tk.Label(root, text="密码:")
userps = tk.Entry(root, show="*")lobutton = tk.Button(root, text="登录", command=on_login_click)
exbutton = tk.Button(root, text="退出", command=exit)# 记录字符串的,用于验证结果怎么样,我可以使用遍历来查找
result_var = tk.StringVar()rebutton = tk.Label(root, textvariable=result_var)name.grid(row=2, column=0, padx=10, pady=5, sticky=tk.E)
userid.grid(row=2, column=1, padx=10, pady=5)
ps.grid(row=3, column=0, padx=10, pady=5, sticky=tk.E)
userps.grid(row=3, column=1, padx=10, pady=5)
lobutton.grid(row=4, column=0, padx=5, pady=10, sticky=tk.SW)
exbutton.grid(row=4, column=1, padx=5, pady=10, sticky=tk.SE)
rebutton.grid(row=5, column=0, columnspan=2, pady=5)root.mainloop()
分析
- 首先导入了
tkinter库,用于创建GUI界面。 - 创建了一个名为
get_movie_info()的函数,用于获取豆瓣电影Top250的电影信息。该函数使用requests库发送HTTP GET请求,并通过解析返回的HTML内容使用BeautifulSoup类提取电影名称、评分和评价人数。最后返回包含电影信息的列表。 - 创建了一个名为
save_to_csv()的函数,用于将电影信息保存到CSV文件中。该函数使用csv库打开指定文件并创建一个CSV写入器,然后逐行写入电影信息。 - 在主程序中,定义了一个名为
url的变量,存储要爬取的豆瓣电影Top250页面的URL。 - 创建了一个名为
root的窗口对象,并设置了窗口标题和大小。 - 创建了一个名为
movies_text的文本框,用于显示电影信息。 - 创建了一个名为
get_movies_button的按钮,用于触发获取电影信息的操作。点击按钮后,调用get_movie_info()函数获取电影信息,并将其显示在movies_text文本框中。 - 创建了一个名为
save_movies_button的按钮,用于触发保存电影信息的操作。点击按钮后,调用save_to_csv()函数将电影信息保存到名为"top250.csv"的CSV文件中。 - 使用
grid()方法将上述部件放置在窗口中的相应位置。 - 调用
root.mainloop()进入GUI界面的事件循环,等待用户交互。
import tkinter as tk
from tkinter import messageboxdef read_users():with open("users.txt", "r") as file:lines = file.readlines()users = [line.strip().split(' ') for line in lines]return usersdef register(username, password, confirm_password):if not username or not password or not confirm_password:return "用户名或密码不能为空!"if password != confirm_password:return "两次密码不一致!"users = read_users()for user in users:if user[0] == username:return "用户名已存在!"with open("users.txt", "a") as file:file.write(f"{username} {password}\n")return "注册成功"def on_register_click():username = entry_username.get()password = entry_password.get()confirm_password = entry_confirm_password.get()result = register(username, password, confirm_password)result_var.set(result)def on_exit_click():root.destroy()root = tk.Tk()
root.title("注册界面")label_username = tk.Label(root, text="用户名:")
entry_username = tk.Entry(root)
label_password = tk.Label(root, text="密码:")
entry_password = tk.Entry(root, show="*")
label_confirm_password = tk.Label(root, text="确认密码:")
entry_confirm_password = tk.Entry(root, show="*")register_button = tk.Button(root, text="注册", command=on_register_click)
exit_button = tk.Button(root, text="退出", command=on_exit_click)result_var = tk.StringVar()
result_label = tk.Label(root, textvariable=result_var)label_username.grid(row=0, column=0, padx=10, pady=5, sticky=tk.E)
entry_username.grid(row=0, column=1, padx=10, pady=5)
label_password.grid(row=1, column=0, padx=10, pady=5, sticky=tk.E)
entry_password.grid(row=1, column=1, padx=10, pady=5)
label_confirm_password.grid(row=2, column=0, padx=10, pady=5, sticky=tk.E)
entry_confirm_password.grid(row=2, column=1, padx=10, pady=5)
register_button.grid(row=3, column=0, padx=5, pady=10, sticky=tk.SW)
exit_button.grid(row=3, column=1, padx=5, pady=10, sticky=tk.SE)
result_label.grid(row=4, column=0, columnspan=2, pady=5)root.mainloop()
相关文章:
py注册登录界面
代码分析 引入tkinter库,并从中导入messagebox模块。 read_users()函数用于读取存储用户信息的文本文件"users.txt"。它打开文件并逐行读取,将每行的用户名和密码以空格分隔后存储在一个列表中,最后返回该列表。 login(username,…...
基于电商场景的高并发RocketMQ实战-Consumer端队列负载均衡分配机制、并发消费以及消费进度提交
🌈🌈🌈🌈🌈🌈🌈🌈 【11来了】文章导读地址:点击查看文章导读! 🍁🍁🍁🍁🍁🍁dz…...
【Java开发岗面试】八股文—数据库MySQLRedis
声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…...
IntelliJ IDEA [设置] 隐藏 .idea 等 .XXX 文件夹
文章目录 1. 问题描述2. 解决办法3. 最后效果4. 特殊处理(正常不需要此步骤)总结 我们使用 IntelliJ IDEA 导入项目的时候,经常会看到一些 .XXX 的文件夹(例如:.idea,.mvn,.gradle 等࿰…...
每日一题——LeetCode961
方法一 排序法: 2*n长度的数组里面有一个元素重复了n次,那么将数组排序,求出排序后数组的中间值(因为长度是偶数,没有刚好的中间值,默认求的中间值是偏左边的那个)那么共有三种情况:…...
基于Unity Editor开发一个技能编辑器可能涉及到的内容
基于Unity Editor开发一个技能编辑器,涉及到的方面较多,涵盖了Unity自身的GUI框架、序列化系统、自定义编辑器、脚本调用与数据存储等。下面是几个关键点和你可能会用到的类以及API: 自定义Inspector: 使用Editor类来重写组件的I…...
Ubuntu 22.04 安装ftp实现与windows文件互传
Ubuntu 22.04 安装ftp实现与windows文件互传 1、配置安装 安装: sudo apt install vsftpd -y使能开机自启: sudo systemctl enable vsftpd 启动: sudo systemctl start vsftpd创建ftp工作目录: sudo mkdir -p /home/ftp/uftp…...
EasyPoi使用案例
EasyPoi使用案例 easypoi旨在简化Excel和Word的操作。基于注解的导入导出,修改注解就可以修改Excel;支持常用的样式自定义;基于map可以灵活定义表头字段;支持一对多的导入导出;支持模板的导出;支持HTML/Exc…...
分布式系统架构设计之分布式数据存储的分类和组合策略
在现下科技发展迅猛的背景下,分布式系统已经成为许多大规模应用和服务的基础架构。分布式架构的设计不仅仅是一项技术挑战,更是对数据存储、管理和处理能力的严峻考验。随着云原生、大数据、人工智能等技术的崛起,分布式系统对于数据的高效存…...
javaEE -18(11000字 JavaScript入门 - 3)
一:事件 (高级) 1.1 注册事件(绑定事件) 给元素添加事件,称为注册事件或者绑定事件,注册事件有两种方式:传统方式和方法监听注册方式 传统注册方式 : 利用 on 开头的…...
LangChain.js 实战系列:入门介绍
📝 LangChain.js 是一个快速开发大模型应用的框架,它提供了一系列强大的功能和工具,使得开发者能够更加高效地构建复杂的应用程序。LangChain.js 实战系列文章将介绍在实际项目中使用 LangChain.js 时的一些方法和技巧。 LangChain.js 是一个…...
pyCharm 打印控制台中文乱码解决办法
解决方法 在 "File" -> "Settings" 中的控制台设置: 在 "File" -> "Settings" 中,你可以找到 "Editor" -> "General" -> "Console"。在这里,你可能会找到…...
计算机基础--Linux详解
一概述 Linux是一种自由和开放源码的类UNIX操作系统。它是由林纳斯托瓦兹于1991年首次发布的,并从那时起在全球范围内得到了广泛的应用和开发。Linux具有强大的可定制性,可以运行在各种硬件平台上,包括x86、ARM、MIPS等。它不仅广泛应用于服…...
基于OpenAI的Whisper构建的高效语音识别模型:faster-whisper
1 faster-whisper介绍 faster-whisper是基于OpenAI的Whisper模型的高效实现,它利用CTranslate2,一个专为Transformer模型设计的快速推理引擎。这种实现不仅提高了语音识别的速度,还优化了内存使用效率。faster-whisper的核心优势在于其能够在…...
cfa一级考生复习经验分享系列(十六)
写在前面:并不鼓励大家在考前一个月才开始复习,不过,既然已经逼到了绝境,灰心丧气也没有用,不如放手一搏! 首先说一下我的背景,工作金融机构的it,和cfa基本没关系,本硕计…...
数模学习day05-插值算法
插值算法有什么作用呢? 答:数模比赛中,常常需要根据已知的函数点进行数据、模型的处理和分析,而有时候现有的数据是极少的,不足以支撑分析的进行,这时就需要使用一些数学的方法,“模拟产生”一些…...
hive中struct相关函数总结
目录 hive官方函数解释示例实战 hive官方函数解释 hive官网函数大全地址:添加链接描述 Return TypeNameDescriptionstructstruct(val1, val2, val3, …)Creates a struct with the given field values. Struct field names will be col1, col2, …structnamed_str…...
macos下转换.dmg文件为 .iso .cdr文件的简单方法
为了让镜像文件在mac 和windows平台通用, 所以需要将.dmg格式的镜像文件转换为.iso文件, 转换方法也非常简单, 一行命令即可 hdiutil convert /path/to/example.dmg -format UDTO -o /path/to/example.iso 转换完成后的文件名称默认是 example.iso.cdr 这里直接将.cdr后缀删…...
ALSA学习(5)——设备中的alsa
参考博客: https://blog.csdn.net/DroidPhone/article/details/7165482 (一下内容基本是原博主的博客转载) 文章目录 一、ASOC的由来二、硬件架构三、软件架构四、数据结构五、内核对ASoC的改进 一、ASOC的由来 ASoC–ALSA System on Chip …...
uniapp中组件库的丰富NumberBox 步进器的用法
目录 基本使用 #步长设置 #限制输入范围 #限制只能输入整数 #禁用 #固定小数位数 #异步变更 #自定义颜色和大小 #自定义 slot API #Props #Events #Slots 基本使用 通过v-model绑定value初始值,此值是双向绑定的,无需在回调中将返回的数值重…...
Qwen2.5-7B-Instruct效果展示:农业病虫害图像描述→防治方案生成
Qwen2.5-7B-Instruct效果展示:农业病虫害图像描述→防治方案生成 想象一下,一位农民在田间地头,用手机拍下一片叶子上的异常斑点。几分钟后,他不仅得到了这是什么病害的准确诊断,还收到了一份详细的、可操作的防治方案…...
国密SM9在微服务网关中TPS骤降42%的真实案例,从ASN.1编码冗余到ZKP预计算的7步性能修复清单
第一章:SM9国密算法在微服务网关中的性能瓶颈全景图 SM9作为我国自主设计的基于身份的密码算法(IBC),其双线性对运算、私钥生成与密文解封等核心操作天然引入显著计算开销。当部署于高并发、低延迟要求的微服务网关(如…...
UE4SS终极指南:解锁虚幻引擎4/5游戏Mod开发新境界
UE4SS终极指南:解锁虚幻引擎4/5游戏Mod开发新境界 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS …...
SecGPT-14B实战手册:Chainlit中集成Markdown渲染与代码块语法高亮
SecGPT-14B实战手册:Chainlit中集成Markdown渲染与代码块语法高亮 1. SecGPT-14B简介 SecGPT是由云起无垠推出的开源大语言模型,专门针对网络安全领域优化。该模型基于先进的自然语言处理技术,能够理解和生成与网络安全相关的专业内容。 S…...
5大理由让你立即选择Argos Translate:开源离线翻译的终极解决方案
5大理由让你立即选择Argos Translate:开源离线翻译的终极解决方案 【免费下载链接】argos-translate Open-source offline translation library written in Python 项目地址: https://gitcode.com/GitHub_Trending/ar/argos-translate Argos Translate是一款…...
SAP Fiori Launchpad 中 Spaces 与 Pages 的传输机制:从对象关系到项目落地的完整实践
在很多 SAP Fiori 项目里,团队把精力放在了应用开发、业务角色设计、SAPUI5 组件装配,或者 Fiori Elements 的元数据驱动页面构建上,却常常低估了一个看似普通、实际上极易影响上线结果的环节:Spaces 与 Pages 的传输。 这个主题之所以重要,不是因为操作本身复杂,而是因…...
别再为IP冲突头疼!YOLOv5+海康威视摄像头组网与实时检测的完整避坑指南
工业视觉组网实战:YOLOv5与海康威视摄像头的智能协同方案 在智能制造与安防监控领域,将AI算法与专业摄像设备结合已成为技术标配。但当工程师真正着手部署时,往往会陷入网络配置的泥潭——IP冲突导致设备失联、RTSP流媒体断断续续、多网卡环…...
wflow工作流设计器:5分钟快速上手的企业流程自动化完整指南
wflow工作流设计器:5分钟快速上手的企业流程自动化完整指南 【免费下载链接】wflow workflow 工作流设计器,企业OA流程设计。表单流程设计界面操作超级简单!!普通用户也能分分钟上手,不需要专业知识。本设计器支持可视…...
使用Perfetto进行Settings中网络热点开启后anr分析的整体流程记录
目录 一.背景 二.Perfetto使用流程 阶段一:抓取 Perfetto Trace 文件 1. 指令核心解析 2. 数据源功能详解 (这些是抓取的“维度”) 3. 该指令的作用场景 阶段二:导入并认识 Perfetto UI 面板 1. 致命异常:Duration: (Did not end) 2…...
OpenClaw+GLM-4.7-Flash:自动化电子书生成与排版工具
OpenClawGLM-4.7-Flash:自动化电子书生成与排版工具 1. 为什么需要自动化电子书制作 作为一个经常需要整理技术文档的开发者,我过去制作电子书的流程堪称"手工活地狱":先在多个网页间复制粘贴内容,用Word调整格式&…...
