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初始值,此值是双向绑定的,无需在回调中将返回的数值重…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...
