如何用python做一个用户登录界面——浔川python社

1 需解决的问题:

  1.1如何用python做一个用户登录界面?

  1.2需要用到哪些库、模块?

2 问题解决:

  2.1 回答 1.1 :合理即可,无标准回答。

  2.2 回答 1.2 :tk库(缩写)、GUL界面、tkinter。messagebox模块......

3 代码展示: 

# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.messagebox
import pickle
import random# 窗口
window = tk.Tk()
window.title('欢迎进入python')
window.geometry('450x200')
# 画布放置图片
# canvas=tk.Canvas(window,height=300,width=500)
# imagefile=tk.PhotoImage(file='qm.png')
# image=canvas.create_image(0,0,anchor='nw',image=imagefile)
# canvas.pack(side='top')
# 标签 用户名密码
Verification_Code = random.randint(1000, 9999)#设置一个随机的四位数
Verification_Code = str(Verification_Code)#把类型转换为str型
print(type(Verification_Code))
tk.Label(window, text='用户名:').place(x=100, y=30)
tk.Label(window, text='密码:').place(x=100, y=70)
tk.Label(window, text='验证码').place(x=100, y=110)
tk.Label(window, text=Verification_Code).place(x=320, y=110)
# 用户名输入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=30)
# 密码输入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=70)
#验证码输入框
var_usr_yzm = tk.StringVar()
entry_usr_yzm = tk.Entry(window, textvariable=var_usr_yzm)
entry_usr_yzm.place(x=160, y=110)# 登录函数
def usr_log_in():# 输入框获取用户名密码usr_name = var_usr_name.get()usr_pwd = var_usr_pwd.get()usr_yzm = var_usr_yzm.get()#测试类型print(type(usr_yzm),type(Verification_Code))# 从本地字典获取用户信息,如果没有则新建本地数据库try:with open('usr_info.pickle', 'rb') as usr_file:usrs_info = pickle.load(usr_file)except FileNotFoundError:with open('usr_info.pickle', 'wb') as usr_file:usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)# 判断验证码是否正确用户名和密码是否匹配if usr_yzm == Verification_Code:if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='welcome',message='欢迎您:' + usr_name)else:tk.messagebox.showerror(message='密码错误')# 用户名密码不能为空elif usr_name == '' or usr_pwd == '':tk.messagebox.showerror(message='用户名或密码为空')# 不在数据库中弹出是否注册的框else:is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')if is_signup:usr_sign_up()elif usr_yzm == '':tk.messagebox.showerror(message='验证码不能为空')else:tk.messagebox.showerror(message='验证码有误!')# 注册函数
def usr_sign_up():# 确认注册时的相应函数def signtowcg():# 获取输入框内的内容nn = new_name.get()np = new_pwd.get()npf = new_pwd_confirm.get()# 本地加载已有用户信息,如果没有则已有用户信息为空try:with open('usr_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)except FileNotFoundError:exist_usr_info = {}# 检查用户名存在、密码为空、密码前后不一致if nn in exist_usr_info:tk.messagebox.showerror('错误', '用户名已存在')elif np == '' or nn == '':tk.messagebox.showerror('错误', '用户名或密码为空')elif np != npf:tk.messagebox.showerror('错误', '密码前后不一致')# 注册信息没有问题则将用户名密码写入数据库else:exist_usr_info[nn] = npwith open('usr_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('欢迎', '注册成功')# 注册成功关闭注册框window_sign_up.destroy()# 新建注册界面window_sign_up = tk.Toplevel(window)window_sign_up.geometry('350x200')window_sign_up.title('注册')# 用户名变量及标签、输入框new_name = tk.StringVar()tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)# 密码变量及标签、输入框new_pwd = tk.StringVar()tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)# 重复密码变量及标签、输入框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)# 确认注册按钮及位置bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',command=signtowcg)bt_confirm_sign_up.place(x=150, y=130)# 退出的函数
def usr_sign_quit():window.destroy()# 登录 注册按钮
bt_login = tk.Button(window, text='登录', command=usr_log_in)
bt_login.place(x=140, y=150)
bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
bt_logup.place(x=210, y=150)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=280, y=150)
# 主循环
window.mainloop()

 3.1 代码运行结果展示:

需注意:如果是未注册用户,系统会提示用户先注册在登录。如是已注册用户,可以直接登录。

注册页面:

填写完之后,点击“确认注册”系统会弹出一个“注册成功”的弹窗。

4 总结 :

这段代码是一个简单的登录注册系统的实现,使用了tkinter库进行图形化界面的开发。

  1. 首先导入了tkinter库以及其他需要的模块(tkinter.messagebox、pickle、random);
  2. 创建一个窗口,并设置标题和大小;
  3. 在窗口中添加了用户名、密码、验证码等标签和输入框;
  4. 定义了登录函数(usr_log_in)和注册函数(usr_sign_up);
  5. 登录函数中首先获取用户输入的用户名、密码和验证码,并从本地数据库中读取用户信息;
  6. 判断验证码是否正确,如果正确则继续判断用户名和密码是否匹配,如果不匹配则弹出密码错误提示框;
  7. 如果用户名存在但密码为空,则弹出用户名或密码为空的提示框;
  8. 如果用户名不存在,则弹出是否注册的提示框,用户选择注册后调用注册函数;
  9. 注册函数中创建了一个新窗口,并添加了用户名、密码和确认密码的输入框;
  10. 确认注册后首先检查用户名是否已存在,如果存在则弹出用户名已存在的错误提示框;
  11. 如果密码为空或用户名为空,则弹出用户名或密码为空的错误提示框;
  12. 如果两次输入的密码不一致,则弹出密码前后不一致的错误提示框;
  13. 如果注册信息没有问题,则将用户名和密码写入本地数据库,并弹出注册成功的提示框;
  14. 最后添加了登录、注册、退出按钮,并通过按钮的command属性调用相关的函数;
  15. 进入主循环,等待用户交互。

需要注意的地方:

  • 该程序使用了pickle模块来读写本地数据库usr_info.pickle,该文件保存了用户名和密码的字典;
  • 验证码使用了random模块生成一个四位数,作为用户登录时的验证码,用户需要输入相同的验证码才能登录成功;
  • 程序使用了tkinter.messagebox模块弹出提示框。

 

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

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

相关文章

C++20实战之channel

C20实战之channel 继前面两节的直播,讲解了thread、jthread、stop_token、stop_source、stop_callback、cv、cv_any等的用法与底层实现,那么如何基于这些知识实现一个小项目呢? 于是引出了这篇,写一个channel出来。 注&#xff1a…

【AI】设计师人人必备的Ai课程,AIGC实战教学

课程介绍 专为设计师定制的AI绘画视觉课程,包含排版、插画、海报和动漫等。共43节课程,2.06G视频,教授AI应用技巧,提高设计效率和质量。内容涵盖词生图方法、AI风格设计等,帮助学员在设计领域取得成就。 1_01-ai课程…

jrt落地deepin

经过昨天一晚上的努力,把deepin和win10的双系统安装好了。同时把jrt开发需要的svn,jdk,idea安装好里,代码也checkout里。 首先安装系统碰到安装deepin后启动时候无法选择win10,在宏伟兄帮助下找到资料执行sudo update-grub解决了。 然后程…

糖果促销【百度之星】/思维

糖果促销 思维 大佬的解法&#xff1a; #include<bits/stdc.h> using namespace std; typedef long long ll; int main() {ll t;cin>>t;for(int i0;i<t;i){ll p,k;cin>>p>>k;if(k0) cout<<0<<endl;else{k-(k-1)/p;cout<<k<…

v-for中key的作用

v-for中key的作用 例如我们用v-for渲染一个列表[1, 2, 4 ,5]&#xff0c;然后在中间插入一个3变成[1,2,3,4,5]。v-for写了key和没有写key&#xff0c;Vue是怎么处理的呢&#xff1f; Vue对有key的会调用patchKeyedChildren方法&#xff1b;没有key的调用patchUnkeyedChildren方…

Vue3 -Computed计算属性

前言&#xff1a; Computed属性属于Vue3中的响应式核心(与之共同说明的还有ref&#xff0c;reactive&#xff0c;watch...) 接受一个 getter 函数&#xff0c;返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set…

AI搜索,围攻百度

图片&#xff5c;电影《双子杀手》截图 ©自象限原创 作者丨程心 国内的大模型厂商落地C端&#xff0c;都盯上了AI搜索。 随着5月30号&#xff0c;腾讯宣布推出基于混元大模型的APP“腾讯元宝”&#xff0c;并基于搜狗搜索引擎&#xff0c;上线AI搜索功能。几乎当下所有…

【Qt】Qt Style Sheets (QSS) 指南:打造个性化用户界面

文章目录 前言&#xff1a;1. QSS 选择器2. 子控件选择器&#xff08;Sub-Controls&#xff09;2.1. 示例&#xff1a;给 QComboBox 给下拉按钮加上图标2.2. 示例&#xff1a;修改进度条颜色 3. 伪类选择器3.1. 代码示例: 设置按钮的伪类样式.3.2. 代码示例: 使用事件方式实现同…

数模混合芯片设计中的修调技术是什么?

一、修调目的 数模混合芯片需要修调技术主要是因为以下几个原因&#xff1a; 工艺偏差&#xff08;Process Variations&#xff09;&#xff1a; 半导体制造过程中存在不可避免的工艺偏差&#xff0c;如晶体管尺寸、阈值电压、电阻和电容值等&#xff0c;这些参数的实际值与…

【学习Day5】操作系统

✍&#x1f3fb;记录学习过程中的输出&#xff0c;坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;指点&#x1f64f; 学习编辑文章的时间不太够用&#xff0c;先放思维导图&#xff0c;后续复习完善细节。

基于jeecgboot-vue3的Flowable流程-我的任务(三)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 这一部分主要讲我的任务里的详情&#xff0c;看流程情况 1、主要调用record/index.vue&#xff0c;调用参数如下&#xff1a; /*** 详情*/function handleDetail(record: Recordable) {c…

构建一个文字冒险游戏:Python 编程实战

在本文中&#xff0c;我们将探索如何使用 Python 创建一个简单的文字冒险游戏。通过这个项目&#xff0c;你将了解到基础的编程技术&#xff0c;包括条件语句、函数和基本的用户输入处理&#xff0c;同时也能体会到文本游戏的魅力和设计的挑战。 项目概述 文字冒险游戏是一种…

python-最接近target的值

【问题描述】&#xff1a;给定一个数组&#xff0c;在数组中找到两个数&#xff0c;使它们的和最接近目标值的值但不超过目标值&#xff0c;然后返回它们的和。 【问题示例】&#xff1a;输入target15,array[1,3,5,11,7],输出14&#xff0c;31114。 完整代码如下&#xff1a; …

童梦奇缘,味你而来 —— 蒙自源六一儿童节特别活动

在六月的暖阳下&#xff0c;孩子们的欢笑声如同最美妙的乐章&#xff0c;奏响了夏日的序曲。在这个充满童真与梦想的季节&#xff0c;蒙自源精心策划了一场别开生面的六一儿童节特别活动&#xff0c;邀请每一位小朋友和大朋友&#xff0c;一同踏上一段奇妙的味蕾之旅。 从5月25…

【深入学习Redis丨第二篇】Redis集群部署详解

文章目录 Redis集群部署Redis4 Cluster部署 Redis集群部署 1 Redis各节点部署 使用源码安装各节点&#xff0c;不过与非cluster方式不同的是&#xff0c;配置文件中需启动cluster相关的配置。 因本次为伪分布式部署&#xff0c;生产环境部署时建议至少3台机器部署&#xff0…

列表和列表项

一、列表和列表项简介 列表是 FreeRTOS 中的一个数据结构&#xff0c;列表被用来跟踪 FreeRTOS中的任务&#xff08;任务当前的状态&#xff09;&#xff0c;列表项就是存放在列表中的项目 列表相当于链表&#xff0c;列表项相当于节点&#xff0c;FreeRTOS 中的列表是一个双向…

Gigapixel AI 安装和使用教程

简介 Topaz Gigapixel AI 是一款功能强大的图像放大软件&#xff0c;它可以帮助用户将低分辨率的图像放大到更高的分辨率&#xff0c;而不会损失细节。该软件利用人工智能技术&#xff0c;能够智能分析图像并重建丢失的细节&#xff0c;从而生成高质量的放大图像。 安装 下载…

系统架构设计师 - 操作系统(1)

操作系统 操作系统&#xff08;5-6分&#xff09;操作系统概述进程管理进程和线程的基本概念进程的状态 ★前趋图 ★★★★信号量与 PV 操作 ★★★★死锁及银行家算法 ★ 大家好呀&#xff01;我是小笙&#xff0c;本章我主要分享系统架构设计师 - 操作系统(1)知识&#xff0c…

2024.6.1 学习记录

1、面经复习 2、项目使用guthub action 完成CI/CD&#xff0c;使用rollup打包为es格式 3、代码随想录刷题复习

Go语言-切片底层探索 —— 补充篇:切片和底层数组到底是什么关系?

之前的切片探索中&#xff0c;上篇通过一道算法题目&#xff0c;了解到切片的两大特性&#xff1a;一是&#xff1a;切片是引用类型&#xff0c;指向底层数组&#xff0c;修改其底层数组的时候&#xff0c;会影响切片中的值。二是&#xff1a;向切片中添加元素的时候&#xff0…