py注册登录界面

代码分析

  1. 引入tkinter库,并从中导入messagebox模块。

  2. read_users()函数用于读取存储用户信息的文本文件"users.txt"。它打开文件并逐行读取,将每行的用户名和密码以空格分隔后存储在一个列表中,最后返回该列表。

  3. login(username, password)函数用于验证用户输入的用户名和密码是否与已存储的用户信息匹配。它调用read_users()函数获取所有用户信息,并遍历该列表。如果找到匹配的用户名和密码,返回True;否则返回False。

  4. on_login_click()函数是登录按钮的回调函数。它首先获取用户输入的用户名和密码,然后进行非空检查。如果用户名或密码为空,将在界面显示"用户名或密码不能为空!"的错误提示信息。否则,调用login()函数进行验证。如果验证通过,弹出一个登录成功的消息框,并清空之前可能存在的错误提示信息;否则,在界面上显示"用户名或密码错误"的提示信息。

  5. exit()函数是退出按钮的回调函数。它调用root.destroy()方法销毁GUI窗口,结束程序运行。

  6. 创建一个名为"登录界面"的GUI窗口对象root

  7. 创建一个欢迎标签welcome_label,设置其文本为"欢迎登录系统",使用Helvetica字体,字号为16,并将其放置在第0行、第0和1列。

  8. 创建用户名标签name、用户名输入框userid、密码标签ps、密码输入框userps,并使用网格布局放置在相应的位置。

  9. 创建登录按钮lobutton,设置其文本为"登录",并将回调函数设置为on_login_click()

  10. 创建退出按钮exbutton,设置其文本为"退出",并将回调函数设置为exit()

  11. 创建用于显示验证结果的标签rebutton,使用result_var变量绑定该标签的文本内容。

  12. 使用网格布局将上述部件放置在相应的位置。

  13. 调用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()

分析

  1. 首先导入了tkinter库,用于创建GUI界面。
  2. 创建了一个名为get_movie_info()的函数,用于获取豆瓣电影Top250的电影信息。该函数使用requests库发送HTTP GET请求,并通过解析返回的HTML内容使用BeautifulSoup类提取电影名称、评分和评价人数。最后返回包含电影信息的列表。
  3. 创建了一个名为save_to_csv()的函数,用于将电影信息保存到CSV文件中。该函数使用csv库打开指定文件并创建一个CSV写入器,然后逐行写入电影信息。
  4. 在主程序中,定义了一个名为url的变量,存储要爬取的豆瓣电影Top250页面的URL。
  5. 创建了一个名为root的窗口对象,并设置了窗口标题和大小。
  6. 创建了一个名为movies_text的文本框,用于显示电影信息。
  7. 创建了一个名为get_movies_button的按钮,用于触发获取电影信息的操作。点击按钮后,调用get_movie_info()函数获取电影信息,并将其显示在movies_text文本框中。
  8. 创建了一个名为save_movies_button的按钮,用于触发保存电影信息的操作。点击按钮后,调用save_to_csv()函数将电影信息保存到名为"top250.csv"的CSV文件中。
  9. 使用grid()方法将上述部件放置在窗口中的相应位置。
  10. 调用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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蜕变,我的2023

作者:苍何,前大厂高级 Java 工程师,阿里云专家博主,CSDN 2023 年 实力新星,土木转码,现任部门技术 leader,专注于互联网技术分享,职场经验分享。 🔥热门文章推荐&#xf…

react-router-dom5升级到6

前言 升级前版本为5.1.2 下载与运行 下载 npm install react-router-dom6运行 运行发现报错: 将node_modules删除,重新执行npm i即可 运行发现如下报错 这是因为之前有引用react-router-dom.min,v6中取消了该文件,所以未找到文件导致报错。…

区块链智能合约恶意交易2022-2024相关论文及idea

写在前面 使用chatpdf,翻译摘要,借鉴参考链接:https://github.com/hzysvilla/Academic_Smart_Contract_Papers的方式快速调研当前顶会的论文idea。 Phoenix: Detect and Locate Resilience Issues in Blockchain via Context-Sensitive Cha…

抖音详情API:开发环境搭建与工具选择

随着短视频的流行,抖音已经成为了一个备受欢迎的社交媒体平台。对于开发人员而言,利用抖音详情API开发定制化的抖音应用具有巨大的潜力。本文将为你详细介绍开发抖音应用的开发环境搭建与工具选择,帮助你顺利地开始开发工作。 一、开发环境搭…

速盾网络:cdn数量对网站访问速度的影响

CDN(内容分发网络)是提高互联网性能和用户体验的关键技术之一,而CDN节点的数量直接影响着访问速度和服务质量。速盾网络作为一家专业的网络安全和CDN服务提供商,深知节点数量在优化用户体验方面的关键性作用。 首先,让…

【网络安全 | Misc】miss_01 太湖杯

解压时提示输入密码: 如果 frFlags 或 deFlags 不为0会导致zip的伪加密 将deFlags的值修改为0 将9改为0,另存为123.zip: 即可绕过加密: 得到一个zip一个docx,但zip需要密码: 因此看docx有无敏感信息&#x…

机器学习、人工智能、深度学习的关系

人工智能(Artificial Intelligence,AI) 人工智能范围很广,它是一门新的科学与工程,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的技术科学,研究内容涵盖语音识别、图像识别、自然语言处理、智能搜索和…

计算机毕业设计------ssm茶叶溯源系统

项目介绍 茶叶溯源系统,分为前台与后台。普通用户可在前台通过18位的编码查询茶叶的出售历史。 后台分为两种角色,管理员与经销商; 管理员主要功能包括: 主界面; 管理员管理:管理员列表、添加管理员&am…

Mybatis Java API - Mapper 注解

MyBatis自诞生以来一直是一个以XML驱动的框架。配置是基于XML的,映射语句也是在XML中定义的。随着MyBatis 3的推出,有了新的选择。MyBatis 3建立在一个全面而强大的基于Java的配置API之上。该配置API是基于XML的MyBatis配置以及新的基于注解的配置的基础…

跨域请求:Go语言下的“通天大道”

开场白:嘿,各位Go语言的爱好者们,你们是否曾经遇到过这样的困扰:当你的Go应用试图与另一个域的API进行交流时,突然跳出一个“未允许的跨域请求”的警告?别担心,今天,我们将一起在这条…

005、数据类型

1. 关于数据类型 Rust中,每个值都有其特定的数据类型,Rust会根据数据的类型来决定如何处理它们。 Rust是一门静态类型语言,它在编译程序的过程中就需要知道所有变量的具体类型。在大部分情况下,编译器可以根据我们如何绑定、使用变…

数据结构-怀化学院期末题(58)

今天发现了一个事情,学校平台可以交c代码,那以后都用c。但是不可以使用迭代器,否则会出现编译错误!!! 题目描述: 小学求算式问题。要求采用栈实现。 输入: 输入第一行为用例个数n。 …

软件测试/测试开发丨Python 内置装饰器 学习笔记

内置类装饰器 不用实例化、直接调用提升代码的可读性 内置装饰器含义classmethod类方法staticmethod静态方法 普通方法 定义: 第一个参数为self,代表 实例本身 调用: 要有实例化的过程,通过 实例对象.方法名 调用 # 1. 定义 c…

Golang简单实现IO操作

在任何语言的开发中,输入/输出 (I/O) 操作都是非常关键的一部分。Golang 提供了 io 和 io/ioutil 标准库,帮助我们进行方便、高效的I/O操作。通过这篇文章,你将了解io库如何提供了对IO原语的基本接口,而io/ioutil库则提供了一些更…

2023.12.31每日一题

LeetCode每日一题 2023年的最后一题 1154.一年中的第几天 1154. 一年中的第几天 - 力扣(LeetCode) 描述 给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。 示例 1: 输入&a…

unity控制摄像机几种视角实现方式

目录 1、按下鼠标右键可以实现摄像机上下左右旋转 2、自由视角 3、摄像头跟随视角 4、跟随自由视角 5、第一人称跟随视角 python学习汇总连接: 1、按下鼠标右键可以实现摄像机上下左右旋转 这段代码定义了一个名为CameraRotate的脚本,用于控制摄像…

一文详解pyspark常用算子与API

rdd.glom() 对rdd的数据进行嵌套,嵌套按照分区来进行 rdd sc.parallelize([1, 2, 3, 4, 5, 6, 7, 8, 9], 2)print(rdd.glom().collect()) 输出:[[1,2,3,4],[5,6,7,8,9]] 参考 PySpark基础入门(2):RDD及其常用算子…

2023年终总结 —— 我和CSDN相遇的第一年之“技术学习和个人成长的回顾与展望”

​ ​ 🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:"没有罗马,那就自己创造罗马~" 目录 🎊对2023的总结与回顾🎊 🏅获奖记录 📚学…

机器学习库【03】:-NumPy-算术运算

一、说明 与常规数学一样,数组算术本质上是关于加法、减法、乘法和除法。在 中NumPy,此类操作是按元素执行的 [2]: NumPy 是 Numerical Python 的缩写,是 Python 生态系统中一个功能强大的库,它提供对大型多维数组和矩…

CentOS虚拟机硬盘管理

CentOS虚拟机硬盘管理 一、创建虚拟机时分配硬盘 创建虚拟机时,在下图这个页面需要重新选择一下硬盘,可以对硬盘进行配置。 默认自动分区 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e9ce72af3d934e75be95f7f86860e92b.png 选择确认分…