学会python——用python制作一个登录和注册窗口(python实例十八)

目录

1.认识Python

2.环境与工具

2.1 python环境

2.2 Visual Studio Code编译

 3.登录和注册窗口

3.1 代码构思

3.2 代码实例

3.3 运行结果

 4.总结


1.认识Python

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字或标点符号,它具有比其他语言更有特色的语法结构。

 

2.环境与工具

2.1 python环境

在Windows上使用命令行窗口查看所安装的python版本

python --version

 

2.2 Visual Studio Code编译

Visual Studio Code是一款由微软开发且跨平台的免费源代码编辑器。该软件以扩展的方式支持语法高亮、代码自动补全、代码重构功能,并且内置了命令行工具和Git 版本控制系统。

 3.登录和注册窗口

3.1 代码构思

通过定义五个函数,实现对磁盘文件的读和写、用户登录判断、注册信息判断、保存以及注册窗口界面的生成。

3.2 代码实例

import tkinter as tk
from tkinter import messagebox
import pickle
import os

# 用pickle模块将字典变量进行序列转换并写入文件
def write_file(path, dic):
    with open(path, 'wb') as f:
        pickle.dump(dic, f)

def read_file(path):
    with open(path, 'rb') as f:
        dic = pickle.load(f)
    return dic

# 判断用户登录时录入的信息是否正确
def login():
    if os.path.exists('name.pickle'):
        userinfo = read_file('name.pickle')
    else:
        userinfo = {}
    name = txt_name.get()
    passwd = txt_passwd.get()
    if name in userinfo.keys():
        if userinfo[name] == passwd:
            messagebox.showinfo('登录成功', '欢迎您,' + name)
        else:
            messagebox.showerror('登录失败', '密码错误')
            txt_name.set('')
            txt_passwd.set('')
            e_name.focus()
    else:
        messagebox.showerror('登录失败', '用户名不存在')

# 实现用户注册功能
def reg(regwin, path, name, passwd, passwd2):
    if passwd != passwd2:
        messagebox.showerror('注册失败', '两次输入的密码不一致')
        return
    if os.path.exists(path):
        userinfo = read_file(path)
    else:
        userinfo = {}
    if name in userinfo.keys():
        messagebox.showerror('注册失败', '用户名已存在')
        return
    else:
        userinfo.update({name: passwd})
        write_file(path, userinfo)
        messagebox.showinfo('注册成功', '欢迎您,' + name)
        regwin.destroy()

# 生成一个注册窗口界面
def create_regwindow():
    regwin = tk.Toplevel(win)
    regwin.title('注册')
    regwin.geometry('300x250')
    lb_name = tk.Label(regwin, text='用户名', bg='gainsboro', font=('arial', 12), height=1, width=10)
    lb_name.place(x=50, y=50)
    lb_passwd = tk.Label(regwin, text='密码', bg='gainsboro', font=('arial', 12), height=1, width=10)
    lb_passwd.place(x=50, y=100)
    lb_passwd2 = tk.Label(regwin, text='确认密码', bg='gainsboro', font=('arial', 12), height=1, width=10)
    lb_passwd2.place(x=50, y=150)
    txt_name = tk.StringVar()
    e_name = tk.Entry(regwin, textvariable=txt_name, font=('arial', 12), width=15)
    e_name.place(x=150, y=50, anchor='nw')
    txt_passwd = tk.StringVar()
    e_passwd = tk.Entry(regwin, textvariable=txt_passwd, font=('arial', 12), show='*')
    e_passwd.place(x=150, y=100, anchor='nw')
    txt_passwd2 = tk.StringVar()
    e_passwd2 = tk.Entry(regwin, textvariable=txt_passwd2, font=('arial', 12), show='*')
    e_passwd2.place(x=150, y=150, anchor='nw')
    # 生成一个注册按钮
    btn_reg = tk.Button(regwin, text='注册', bg='gainsboro', font=('arial', 12), height=1, width=10, 
                        command=lambda: reg(regwin, './part4/name.pickle', txt_name.get(), txt_passwd.get(), txt_passwd2.get()))
    btn_reg.place(x=100, y=200, anchor='nw')

if __name__ == '__main__':
    win = tk.Tk()
    win.title('登录')
    win.geometry('300x200')
    win['background'] = 'gainsboro'
    lb_name = tk.Label(win, text='用户名', bg='gainsboro', font=('arial', 12), height=1, width=10)
    lb_name.place(x=50, y=50, anchor='nw')
    lb_passwd = tk.Label(win, text='密码', bg='gainsboro', font=('arial', 12), height=1, width=10)
    lb_passwd.place(x=50, y=100, anchor='nw')
    txt_name = tk.StringVar()
    e_name = tk.Entry(win, textvariable=txt_name, font=('arial', 12), width=15)
    e_name.place(x=150, y=50, anchor='nw')
    txt_passwd = tk.StringVar()
    e_passwd = tk.Entry(win, textvariable=txt_passwd, font=('arial', 12), show='*')
    e_passwd.place(x=150, y=100, anchor='nw')
    btn_log = tk.Button(win, text='登录', bg='gainsboro', font=('arial', 12), height=1, width=10, command=login)
    btn_log.place(x=50, y=150, anchor='nw')
    btn_reg = tk.Button(win, text='注册', bg='gainsboro', font=('arial', 12), height=1, width=10, command=create_regwindow)
    btn_reg.place(x=150, y=150, anchor='nw')
    win.mainloop()

3.3 运行结果

 登录

注册(以用户名111,密码111为例)

 登录成功

 4.总结

通过定义函数实现可视化界面,通过利用python库实现信息的交互。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

扫地机器人如何利用图算法来进行避障策略和优化清扫路径的?

前言 扫地机器人是现代家庭中最常见的智能设备。其基本的核心组件由主控系统(大脑)、传感器等控制系统(感知系统)、动力供应系统(心脏)、清扫系统(四肢)组成。 扫地机器人的智能、高…

【中项第三版】系统集成项目管理工程师 | 第 9 章 项目管理概论② | 9.4 - 9.5

前言 第 9 章对应的内容选择题和案例分析都会进行考查,这一章节理论性较强,学习要以教材为准。本章分值预计在4-5分。 目录 9.4 项目生命周期和项目阶段 9.4.1 定义与特征 9.4.2 生命周期类型 9.5 项目立项管理 9.5.1 项目建议与立项申请 9.5.2 …

交换数字00

题目链接 交换数字 题目描述 注意点 numbers.length 2-2147483647 < numbers[i] < 2147483647 解答思路 不适用临时变量&#xff0c;可以先将numbers[0]和numbers[1]的信息都存到某个位置&#xff08;可以相加可以相减或其他位操作&#xff09;&#xff0c;然后另一…

昇思MindSpore学习笔记4-02生成式--DCGAN生成漫画头像

摘要&#xff1a; 记录了昇思MindSpore AI框架使用70171张动漫头像图片训练一个DCGAN神经网络生成式对抗网络&#xff0c;并用来生成漫画头像的过程、步骤。包括环境准备、下载数据集、加载数据和预处理、构造网络、模型训练等。 一、概念 深度卷积对抗生成网络DCGAN Deep C…

MMSC物料库位扩充

MMSC物料库位扩充 输入事务码MMSC&#xff1a; 回车后添加新的库位即可&#xff1a; 代码实现&#xff0c;使用BDC *&------------------------------------------------* *&BDC的定义 *&------------------------------------------------* DATA gt_bdcdata T…

【UE5.1】Chaos物理系统基础——03 炸开几何体集

目录 步骤 一、通过径向向量将几何体集炸开 二、优化炸开效果——让破裂的碎块自然下落 三、优化炸开效果——让碎块旋转起来 四、优化炸开效果——让碎块旋转的越来越慢 步骤 一、通过径向向量将几何体集炸开 1. 打开上一篇中&#xff08;【UE5.1】Chaos物理系统基础—…

百度出品_文心快码Comate提升程序员效率

1.文心快码 文心快码包含指令、插件 和 知识三种功能&#xff0c; 1&#xff09;指令包含Base64编码、Base64解码、JSON转TS类型、JSON转YAML、JWT解码喂JSON。 2&#xff09;插件包含 3&#xff09;指令包含如下功能&#xff1a; 官网链接

Jenkins 强制杀job

有时候有的jenkins job运行时间太长&#xff0c;在jenkins界面点击x按钮进行abort&#xff0c;会失败&#xff1a; 这时候点击&#xff1a; “Click here to forcibly terminate running steps” 会进一步kill 任务&#xff0c;但是也还是有杀不掉的可能性。 终极武器是jenkin…

Aigtek电压放大器参数有哪些

电压放大器是广泛应用于电子电路中的一种重要电路元件&#xff0c;它主要用于将输入信号的电压放大到所需的输出电压水平。在设计和使用电压放大器时&#xff0c;我们需要了解并考虑一系列的参数和特性。本文将详细介绍电压放大器的主要参数&#xff0c;包括放大倍数、带宽、输…

springboot校园购物网站APP-计算机毕业设计源码041037

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

【国产开源可视化引擎Meta2d.js】图层

独立图层 每个图元都有先后绘画顺序&#xff0c;即每个图元拥有一个独立图层&#xff0c;即meta2d.data().pens的数组索引。 可以通过meta2d.top/bottom/up/down等函数改变独立图层顺序。 分组图层 通过标签可以标识一个分组图层&#xff0c;通过meta2d.find(图层标签)获取…

己内酰胺纯化除杂的最佳工艺

己内酰胺纯化除杂的最佳工艺包括结晶法、离子交换树脂法、精馏法和萃取法等&#xff0c;每种方法都有其特定的应用场景和优缺点。以下是对这些方法的详细介绍&#xff1a; 最佳工艺介绍 ● 结晶法&#xff1a;通过调节pH值&#xff0c;使己内酰胺在特定条件下结晶&#xff0…

yolov8环境安装(可修改代码版本,源代码安装)

下载下来源文件以后&#xff0c;进去文件目录&#xff0c;然后输入pip指令&#xff0c;即可安装yolov8 cd ultralytics-main pip install -e . 直接使用pip安装的情况 当你使用pip install ultralytics这样的命令安装YOLOv8时&#xff0c;你实际上是在从Python包索引&#x…

C#实战|账号管理系统:通用登录窗体的实现。

哈喽,你好啊,我是雷工! 本节记录登录窗体的实现方法,比较有通用性,所有的项目登录窗体实现基本都是这个实现思路。 一通百通,以下为学习笔记。 01 登录窗体的逻辑 用户在登录窗输入账号和密码,如果输入账号和密码信息正确,点击【登录】按钮,则跳转显示主窗体,同时在固…

AI提示词:一个能让你的AI提升10倍逻辑能力的提示词,只有这几个字,Kimi和GPT都适用!

昨天晚上和朋友聊天&#xff0c;聊到AI提示词在实际使用过程中的逻辑能力问题。 他也是一个AI提示词的重度使用者&#xff0c;但是会经常遇到一个问题&#xff1a;明明觉得自己的提示词描述的很清楚了&#xff0c;可是AI输出的内容还是达不到自己想要的效果。 今天给大家分享…

认识不-物联网“六域模型”有哪些有什么作用

如下参考源于苏州稳联授权可见认知域-感知域-网络域-应用域-管理域-安全域-物联网六域模型 苏州稳联 (iotrouter.cn) 认识物联网“六域模型”&#xff1a;构成与作用 “六域模型”是一个有效的框架。这个模型通过将物联网划分为六个相互关联的域&#xff0c;帮助我们更好地理…

【网络安全】漏洞挖掘之Spring Cloud注入漏洞

漏洞描述 Spring框架为现代基于java的企业应用程序(在任何类型的部署平台上)提供了一个全面的编程和配置模型。 Spring Cloud 中的 serveless框架 Spring Cloud Function 中的 RoutingFunction 类的 apply 方法将请求头中的“spring.cloud.function.routing-expression”参数…

免费的二级域名分发,您确定不要试试吗?

这是可爱的小盆友做的一个免费的二级域名&#xff0c;目前上线就送114514个积分&#xff0c;名额有限~ 首先进入>路明二级域名分发 - 免费稳定的二级域名分发服务 (kmyl.top)< 进来是这个样子&#xff08;如下图所示&#xff09; 话不多说&#xff0c;进入教程~ 第一章…

创建react的脚手架

Create React App 中文文档 (bootcss.com) 网址&#xff1a;creat-react-app.bootcss.com 主流的脚手架&#xff1a;creat-react-app 创建脚手架的方法&#xff1a; 方法一&#xff08;JS默认&#xff09;&#xff1a; 1. npx create-react-app my-app 2. cd my-app 3. …

Redis 7.x 系列【19】管道

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 往返时间2. 管道技术3. 代码演示4. 其他批处理4.1 原生批处理命令4.2 事务4.3 脚本…