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初始值,此值是双向绑定的,无需在回调中将返回的数值重…...
机器人路径规划算法之VFH算法详解+MATLAB代码实现
目录 一、 运作原理:三步把地图变成方向 1. 建图:构建直方图网格(Histogram Grid) 2. 降维:生成极坐标直方图(Polar Histogram) 3. 决策:代价函数与山谷选择 二、 算法演进&…...
Qwen3-VL:30B多模态大模型在飞书智能办公中的实战应用
Qwen3-VL:30B多模态大模型在飞书智能办公中的实战应用 飞书作为现代企业智能办公平台,如何通过多模态大模型实现真正的智能化升级?本文将带你从零搭建企业级AI助手,让图文交互能力真正落地业务场景。 1. 为什么企业需要多模态AI助手ÿ…...
精读《Harness design for long-running application development》:真正拉开差距的,不是模型本身,而是你怎么给它harness
精读《Harness design for long-running application development》:真正拉开差距的,不是模型本身,而是你怎么给它搭脚手架 原文:Harness design for long-running application development Anthropic 这篇文章最值得读的地方&a…...
Qwen3-ASR-0.6B WebUI实战:中文方言自动识别与结果导出操作
Qwen3-ASR-0.6B WebUI实战:中文方言自动识别与结果导出操作 1. 快速了解Qwen3-ASR-0.6B语音识别模型 Qwen3-ASR-0.6B是一个轻量级但性能强大的语音识别模型,专门为实际应用场景设计。这个模型只有6亿参数,但识别效果却相当出色,…...
Llama-3.2V-11B-cot部署教程:bf16+auto device_map双卡4090显存优化详解
Llama-3.2V-11B-cot部署教程:bf16auto device_map双卡4090显存优化详解 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具,专为双卡4090环境深度优化。本教程将详细介绍如何快速部署这一专业级解决方…...
TurboDiffusion应用场景探索:电商、教育、社交,AI视频如何赋能各行各业
TurboDiffusion应用场景探索:电商、教育、社交,AI视频如何赋能各行各业 1. 引言:AI视频生成的新纪元 想象一下这样的场景:早上9点,电商运营团队需要为100款新产品制作展示视频;下午2点,在线教…...
GTE文本向量助力智能写作:文本分类与情感倾向双重把关
GTE文本向量助力智能写作:文本分类与情感倾向双重把关 1. 智能写作的核心挑战:内容质量的多维评估 在内容创作领域,我们常常面临一个基本矛盾:如何同时保证文本的专业性和情感表达?传统写作辅助工具往往只能解决单一…...
RWKV7-1.5B-g1a部署案例:从零搭建轻量中文对话服务,60秒完成API调用
RWKV7-1.5B-g1a部署案例:从零搭建轻量中文对话服务,60秒完成API调用 1. 模型简介 rwkv7-1.5B-g1a是基于新一代RWKV-7架构开发的多语言文本生成模型,特别适合中文场景下的轻量级对话应用。这个1.5B参数的版本在保持较高生成质量的同时&#…...
EMI滤波器选型指南:从共模与差模噪声到实际应用场景
1. EMI滤波器的核心作用与选型挑战 刚入行那会儿,我负责的第一个电源项目就栽在了EMI测试上。设备一上电,测试仪器的曲线就像心电图发作似的疯狂跳动。当时 mentor 只说了一句:"去查查共模和差模的区别"。这句话成了我后来十年硬件…...
三菱PLC与MCGS组态农田智能灌溉系统:后发送产品包括梯形图原理图、IO分配及组态画面解析
基于三菱PLC和MCGS组态农田智能灌溉系统 我们主要的后发送的产品有,带解释的梯形图接线图原理图图纸,io分配,组态画面上周刚把农田智能灌溉的项目收尾,把资料打包发给客户的时候,终于能瘫在椅子上喝杯冰可乐了。这个…...
