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

news2024/12/23 3:45:25

目录

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.coloradmin.cn/o/1893918.html

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

相关文章

tapd 与国内外主流的8大项目管理软件大对比

对比Tapd与8大项目管理工具:PingCode、Worktile、Redmine、Teambition、广联达、Jira、禅道、飞书。 Tapd 是腾讯推出的一款敏捷开发管理工具,特别适合那些需要高效协作和快速迭代的敏捷开发团队。它支持多种敏捷方法论,包括Scrum和Kanban&am…

二轴机器人装箱机:重塑物流效率,精准灵活,引领未来装箱新潮流

在现代化物流领域,高效、精准与灵活性无疑是各大企业追求的核心目标。而在这个日益追求自动化的时代,二轴机器人装箱机凭借其较佳的性能和出色的表现,正逐渐成为装箱作业的得力助手,引领着未来装箱新潮流。 一、高效:重…

字节码编程ASM之生成变量并sout

写在前面 本文看下如何通过asm生成变量并sout。 1:代码 直接看代码吧,注释很详细,有不懂的,留言告诉我: package com.dahuyuo.asmtest;import org.objectweb.asm.*; import org.objectweb.asm.commons.AdviceAdapt…

PE文件学习

一、介绍 PE文件,即Portable Executable文件,是一种标准的文件格式,主要用于微软的Windows操作系统上。这种格式被用来创建可执行程序(如.exe文件)、动态链接库(.DLL文件)、设备驱动&#xff0…

千万不要用国产BI,不然你会发现它性价比奇高——以奥威BI软件为例

在信息技术日新月异的今天,企业对于商业智能(BI)软件的选择往往陷入了一个误区:盲目追求国际品牌,却忽视了身边那些性价比极高的国产精品。如果你不慎踏入了“千万不要用国产BI”的陷阱,那么奥威BI软件将是…

豆包Marscode体验官,体验云编程和AI助手加持的快乐

我正在参加「豆包MarsCode初体验」征文活动,活动链接:https://juejin.cn/post/7384997062416252939?utm_sourcejuejin&utm_mediumpush&utm_campaigntiyanguan Marscode官网地址:工作台 - MarsCode 其实早在前不久,我就…

谷歌地图 | 路线优化 API 助力企业解锁物流新潜能

在当今竞争激烈的市场环境中,企业面临着越来越大的压力,需要提高运营效率、降低成本并满足不断增长的客户期望。对于依赖车队进行交付或服务的企业来说,这些挑战尤为艰巨。 近日, Google 地图平台路线优化 API 已经正式上线。路线…

服务器工具集合推荐

推荐一个朋友开源的服务器运维整合工具,目前的功能包括: ddns,rdp、ssh终端、ftp、http代理,支持在线文件编辑,文件管理,docker,进程,系统监控、wol唤醒,电脑远程开机,点对点&#…

【STM32】在标准库中使用DMA

1.MDA简介 DMA全称Direct Memory Access,直接存储区访问。 DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和…

科普文:Linux服务器性能调优之CPU调度策略和可调参数

概叙 进程 进程是操作系统虚拟出来的概念,用来组织计算机中的任务。计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用…

Raylib 解决拖拽与绘制坐标,在GPU坐标与鼠标坐标不相同的解决办法

注意数字可以通过加减排列组合得出 原理,诞生于发现可以拖拽,数据加减,与左下角排列,发现坐标系可以按左下角为原点理解 int positionx 0 - draftx;int positiony 0 drafty; // 相对于左下角位置,水平方向就是当…

TensorRT-Int8量化详解

int8量化是利用int8乘法替换float32乘法实现性能加速的一种方法 对于常规模型有:y kx b,此时x、k、b都是float32, 对于kx的计算使用float32的乘法 对于int8模型有:y tofp32(toint8(k) * toint8(x)) b,其中int8 * int8结果为in…

软件安全测试之代码审计包括哪些内容?代码审计报告该如何获取?

在信息化时代,随着计算机技术的快速发展,软件产品已经成为了人们生活和工作中不可或缺的一部分。然而,随着软件产品的复杂性和应用范围的扩大,软件安全性问题日益凸显,给企业和个人带来了极大的风险。为了保障软件系统…

JAVA每日作业day7.4

ok了家人们今天学习了Date类和simpleDateformat类,话不多说我们一起看看吧 一.Date类 类 java.util.Date 表示特定的瞬间 ( 日期和时间 ) ,精确到毫秒。 1.2 Date类的构造方法 public Date(): 用来创建当前系统时间对应的日期对象。 public Date(long …

BBA车主,千万别去试驾问界M9

文 | AUTO芯球 作者 | 雷慢&响铃 我劝你啊,千万别去试驾问界M9, 不然啊,可能1个小时50万就没了, 不信你看这个“大冤种”, 他曾经发誓打死不买电车, 考虑了三、四年换宝马X5, 结果谈完…

@react-google-maps/api实现谷歌地图嵌入React项目中,并且做到点击地图任意一处,获得它的经纬度

1.第一步要加入项目package.json中或者直接yarn install它都可以 "react-google-maps/api": "^2.19.3",2.加入项目中 import AMapLoader from amap/amap-jsapi-loader;import React, { PureComponent } from react; import { GoogleMap, LoadScript, Mar…

工业智能网关的作用有哪些?工业智能网关与传统网关的主要区别-天拓四方

工业智能网关是一种专为工业环境设计的网络设备,具备数据采集、传输、协议转换以及边缘计算等功能。它作为连接工业设备与互联网的关键枢纽,不仅实现了工业设备的互联互通,还通过对采集到的数据进行实时分析,为工业生产的智能化管…

AI墓地:738个倒闭AI项目的启示

近年来,人工智能技术迅猛发展,然而,不少AI项目却在市场上悄然消失。根据AI工具聚合网站“DANG”的统计,截至2024年6月,共有738个AI项目停运或停止维护。本文将探讨这些AI项目失败的原因,并分析当前AI初创企…

甲骨文首次将LLMs引入数据库,集成Llama 3和Mistral,和数据库高效对话

信息时代,数据为王。数据库作为数据存储&管理的一种方式,正在以势不可挡的趋势与AI结合。 前有OpenAI 收购了数据库初创公司 Rockset,引发广泛关注;Oracle公司(甲骨文)作为全球最大的信息管理软件及服…