python——井字棋游戏——登入注册界面

本篇文章只讲解登入和注册页面,在后面的文章中会讲解井字棋游戏,然后把井字棋和登入界面进行连接,整合成一个完整的游戏。

登入注册界面在本篇文章的末尾。

1.实现登入界面

(1)导入图片在这里插入图片描述

把这张图片存储在与代码路径一样的文件夹,并取名为welcome,该图片是gif格式。
先创建个窗口,然后把图片绘制到里面。

代码:
import tkinter as tk
window = tk.Tk()
window.title("Welcome")
window.geometry("600x400")logo = tk.PhotoImage(file="image/welcome.gif")
label = tk.Label(window, image=logo)
label.pack()window.mainloop()

运行结果如下:
在这里插入图片描述

(2)设置窗口输入框和按钮

在窗口图片下面设置名字和密码以及相应的输入框,还有登入注册按钮。

代码:
t1 = tk.Label(window, text="User name")
t1.place(x=70, y=130)
label_title1 = tk.Entry(window, bd=5)
label_title1.pack(padx=10, pady=5)
t2 = tk.Label(window, text="Password")
t2.place(x=70, y=180)
label_title2 = tk.Entry(window, bd=5)
label_title2.pack(padx=10, pady=5)button1 = tk.Button(window, text="登入", width=10, height=2, fg='black')
button1.place(x=180, y=250)
button2 = tk.Button(window, text="注册", width=10, height=2, fg='black')
button2.place(x=350, y=250)

运行结果如下:
在这里插入图片描述

2.实现注册窗口

(1)设置注册窗口的输入框和标签

定义函数把注册框的注册窗口都放置在函数中

def usr_sign_up():print('开始注册')
# 注册窗口
win = tk.Toplevel(window)
win.title("Sign up window")
win.geometry("300x200")
lb1_title2 = tk.Label(win, text='User name:')
lb1_title2.grid(row=0, column=0)
e1 = tk.Entry(win, bd=5, width=10)
e1.grid(row=0, column=2)
lb2 = tk.Label(win, text='Password:')
lb2.grid(row=1, column=0)
e2 = tk.Entry(win, bd=5, width=10)
e2.grid(row=1, column=2)
lb3 = tk.Label(win, text='Confirm password:')
lb3.grid(row=2, column=0)
e3 = tk.Entry(win, bd=5, width=10)
e3.grid(row=2, column=2)
button_z = tk.Button(win, text="Sign up",command=sign_up)
button_z.grid(row=4, column=2)

我们还需要把注册界面的函数连接到登录界面的按钮中

button2 = tk.Button(window, text="注册", width=10, height=2, fg='black',command=usr_sign_up)
button2.place(x=350, y=250)

这样我们点击登入窗口中的注册按钮就会弹出注册界面

(2)获取注册数据判断是否注册过

在这之前我们先在代码最上方导入两个模块,如下所示,我们再定义一个函数,检测三个输入框输入的值,如果输入框中两次输入的密码不一样则会弹出提示,如果注册过也会弹出提示,如果注册成功会提示你注册成功,最后销毁窗口。
1.import tkinter.messagebox:
导入了tkinter.messagebox模块,该模块提供了对话框和消息框的功能,用于在GUI应用程序中显示消息、警告或确认对话框等。常见的方法包括showinfo()、showwarning()、showerror()等,用于显示不同类型的消息框。
2.import pickle:
这行代码导入了pickle模块,pickle模块是Python中用于序列化和反序列化对象的模块。通过pickle模块,可以将对象转换为字节流进行存储或传输,也可以从字节流中恢复对象。pickle模块提供了dump()、load()等方法来实现对象的序列化和反序列化操作。

代码:
import tkinter.messagebox
import pickle
def sign_up():#获取输入nn = e1.get()np = e2.get()npf =e3.get()#读取后台数据with open('usrs_info.pickle', 'rb') as usr_file:#从usr_file文件中加载数据,将其反序列化为Python对象,并将结果存储在exist_usr_info变量中。exist_usr_info = pickle.load(usr_file)#判断两次输入的密码是否一致if np != npf:tk.messagebox.showerror('Error','Password and confirm password must be the same')#判断用户名是否已经注册过elif nn in exist_usr_info:print('已经注册过了')tk.messagebox.showerror('Error','The user has already signed up')#注册成功,写入后台else:exist_usr_info[nn] = npwith open('user_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('Welcome','You have successfully signed up')# 销毁窗口win.destroy()

在注册界面的按钮中导入此函数,在注册时好进行判断
在这里插入图片描述
以下是代码运行的结果:
在这里插入图片描述

3.定义登入按钮

当用户通过输入框输入用户名和密码。尝试打开一个名为文件,如果文件存在,则加载其中的用户信息数据到文件中。如果文件不存在则创建一个默认的用户信息字典并将其序列化写入文件中。检查用户输入的用户名是否在用户信息字典中。如果用户名存在,检查用户输入的密码是否与用户名对应的密码匹配。如果密码匹配,显示欢迎消息框,如果密码不匹配,显示密码错误的错误消息框。如果用户名不存在,显示询问框询问用户是否要注册。如果用户选择注册,调用usr_sign_up()函数进行注册操作。

代码:
def usr_login():#获取输入框label_title1中用户输入的用户名,并将其存储在usr_name变量中。usr_name = label_title1.get()#获取输入框label_title2中用户输入的密码,并将其存储在usr_pwd变量中。usr_pwd = label_title2.get()print(usr_name)try:#打开名为usrs_info.pickle的文件,以二进制只读模式打开,并将文件对象赋给usr_file变量。with open('usrs_info.pickle', 'rb') as usr_file:print('1')#从usr_file文件中加载数据,将其反序列化为Python对象,并将结果存储在usrs_info变量中。usrs_info = pickle.load(usr_file)print(usrs_info)except FileNotFoundError:with open('usrs_info.pickle', 'wb') as usr_file:print('2')usrs_info = {'admin': 'admin'}#将usrs_info字典序列化并写入usr_file文件。pickle.dump(usrs_info, usr_file)  # 序列化print('OK')print('usr_name:', usr_name)if usr_name in usrs_info:print('3')if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='Welcome', message='How are your?' + usr_name)window.destroy()subprocess.Popen(["python", "demo3.py"])# main()else:#显示一个错误框,提示用户密码错误。tk.messagebox.showerror(message='Error,your password is wrong,try again.')else:#显示一个询问框,询问用户是否要注册。is_sign_up = tk.messagebox.askyesno(title='Welcome', message='You have not sign up yet.Sign up today?')if is_sign_up:usr_sign_up()

以下是运行结果:
在这里插入图片描述
完整代码如下:

import tkinter as tk
import tkinter.messagebox
import pickle
import subprocesswindow = tk.Tk()
window.title("Welcome")
window.geometry("600x400")
logo = tk.PhotoImage(file="image/welcome.gif")
label = tk.Label(window, image=logo)
label.pack()
t1 = tk.Label(window, text="User name")
t1.place(x=70, y=130)
label_title1 = tk.Entry(window, bd=5)
label_title1.pack(padx=10, pady=5)
t2 = tk.Label(window, text="Password")
t2.place(x=70, y=180)
label_title2 = tk.Entry(window, bd=5)
label_title2.pack(padx=10, pady=5)def usr_login():#获取输入框label_title1中用户输入的用户名,并将其存储在usr_name变量中。usr_name = label_title1.get()#获取输入框label_title2中用户输入的密码,并将其存储在usr_pwd变量中。usr_pwd = label_title2.get()print(usr_name)try:#打开名为usrs_info.pickle的文件,以二进制只读模式打开,并将文件对象赋给usr_file变量。with open('usrs_info.pickle', 'rb') as usr_file:print('1')#从usr_file文件中加载数据,将其反序列化为Python对象,并将结果存储在usrs_info变量中。usrs_info = pickle.load(usr_file)print(usrs_info)except FileNotFoundError:with open('usrs_info.pickle', 'wb') as usr_file:print('2')usrs_info = {'admin': 'admin'}#将usrs_info字典序列化并写入usr_file文件。pickle.dump(usrs_info, usr_file)  # 序列化print('OK')print('usr_name:', usr_name)if usr_name in usrs_info:print('3')if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='Welcome', message='How are your?' + usr_name)else:#显示一个错误框,提示用户密码错误。tk.messagebox.showerror(message='Error,your password is wrong,try again.')else:#显示一个询问框,询问用户是否要注册。is_sign_up = tk.messagebox.askyesno(title='Welcome', message='You have not sign up yet.Sign up today?')if is_sign_up:usr_sign_up()def usr_sign_up():print('开始注册')def sign_up():#获取输入nn = e1.get()np = e2.get()npf =e3.get()#读取后台数据with open('usrs_info.pickle', 'rb') as usr_file:#从usr_file文件中加载数据,将其反序列化为Python对象,并将结果存储在exist_usr_info变量中。exist_usr_info = pickle.load(usr_file)#判断两次输入的密码是否一致if np != npf:tk.messagebox.showerror('Error','Password and confirm password must be the same')#判断用户名是否已经注册过elif nn in exist_usr_info:print('已经注册过了')tk.messagebox.showerror('Error','The user has already signed up')#注册成功,写入后台else:exist_usr_info[nn] = npwith open('user_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('Welcome','You have successfully signed up')# 销毁窗口win.destroy()#注册窗口win = tk.Toplevel(window)win.title("Sign up window")win.geometry("300x200")lb1_title2 = tk.Label(win, text='User name:')lb1_title2.grid(row=0, column=0)e1 = tk.Entry(win, bd=5, width=10)e1.grid(row=0, column=2)lb2 = tk.Label(win, text='Password:')lb2.grid(row=1, column=0)e2 = tk.Entry(win, bd=5, width=10)e2.grid(row=1, column=2)lb3 = tk.Label(win, text='Confirm password:')lb3.grid(row=2, column=0)e3 = tk.Entry(win, bd=5, width=10)e3.grid(row=2, column=2)button_z = tk.Button(win, text="Sign up", command=sign_up)button_z.grid(row=4, column=2)button1 = tk.Button(window, text="登入", width=10, height=2, fg='black',command=usr_login)
button1.place(x=180, y=250)
button2 = tk.Button(window, text="注册", width=10, height=2, fg='black',command=usr_sign_up)
button2.place(x=350, y=250)window.mainloop()

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

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

相关文章

Rundeck(四)安全配置

自动化运维工具rundeck GitHub - rundeck 是java开发的开源自动化服务,具有 Web 控制台、命令行工具和 WebAPI。它使您可以轻松地跨一组节点运行自动化任务,适合运维自动化管理、自动发布管理、运维数据分析等 网站:https://www.rundeck.co…

人人开源框架运行

Getting started renrenio/renren-fast-vue Wiki GitHub 人人开源 1.启动navicat:新建一个数据库renren-fast,字符集为utf-8,utf-8mb3或者utf-8mb4,排序规则不选 2.数据库操作在renren-fast数据库中选择表,运行renren-fast-ma…

LeetCode 每日一题 ---- 【1017.负二进制转换】

LeetCode 每日一题 ---- 【1017.负二进制转换】 1017.负二进制转换方法一:模拟进制转换推广:任意进制转换 1017.负二进制转换 方法一:模拟进制转换 我们平常做进制转换最常用的方法就是辗转相除法,下面的图示分别给出了普通的10…

web自动化测试详细流程和步骤

一、什么是web自动化测试 自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人的直接参与下,按照人的要求,经过自动检测、信息处理、分析判断、操纵控制,实现预期的目…

卷积注意力模块 CBAM | CBAM: Convolutional Block Attention Module

论文名称:《CBAM: Convolutional Block Attention Module》 论文地址:https://arxiv.org/pdf/1807.06521.pdf 我们提出了卷积块注意力模块(CBAM),这是一种简单但有效的前馈卷积神经网络注意力模块。给定一个中间特征图…

transformer上手(10)—— 文本摘要任务

文本摘要是一个 Seq2Seq 任务,尽可能保留文本语义的情况下将长文本压缩为短文本。 文本摘要可以看作是将长文本“翻译”为捕获关键信息的短文本,因此大部分文本摘要模型同样采用 Encoder-Decoder 框架。当然,也有一些非 Encoder-Decoder 框架…

prompt提示词:AI英语词典,让AI教你学英语,通过AI实现一个网易有道英语词典

目录 英语词典提问技巧效果图:提示词: 英语词典提问技巧 随着AI工具的出现,学英语也可以变得很简单,大家可以直接通过AI 来帮助自己,提高记忆单词的效率,都可以不需要网易有道词典了,今天我教大…

分布式ID之雪花算法

1. Seata对雪花算法生成ID的改良 滑动验证页面 (含代码&讲解) Seata基于改良版雪花算法的分布式UUID生成器分析:时间戳和节点ID位置进行了调换。官网:Seata基于改良版雪花算法的分布式UUID生成器分析 | Apache Seata关于新版…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

第二证券|股息分红和送股哪个好?

在股票投资中,股息分红和分红送股是两种常见的股票分红方法。关于股息分红和送股哪个好,第二证券下面就为我们具体介绍一下。 股息分红和送股哪个好并没有一个绝对的答案,它们只是上市公司向股东分配利润的不同方法。股息分红的好处是投资者…

武汉星起航:挂牌上海股权中心,开启资本新篇章助力跨境电商飞跃

2023年10月30日,武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示,标志着这家在跨境电商领域拥有卓越声誉的企业正式迈入了资本市场的大门。对于武汉星起航来说,这不仅是其发展历程中的一个重要里程碑,更是对其业务…

STM32-TIM定时器与PWM输出

学习目标: 1. 熟练掌握 TIM 的参数配置。 2. 掌握通道的参数配置。 3. 深刻理解 PWM 与功率的关系。 4. 理解 PWM 的原理示意。 一 什么是 PWM 输出 PWM ( pulse width modulation )一种脉冲宽度调节技术。 PWM 的效果是什么样子&#xf…

AOMEI Partition Assistant傲梅分区助手技术员版:专业级的硬盘分区利器

在数字化时代,数据存储和管理变得愈发重要。对于电脑技术员而言,一款功能强大、操作简便的分区工具无疑是提高工作效率的得力助手。而傲梅分区助手技术员版(AOMEI Partition Assistant)正是这样一款备受赞誉的专业级硬盘分区软件。…

Day23.一刷数据结构算法(C语言版) 39组合总和;40组合总和II;131分割回文串

一、39组合总和 本题是集合里元素可以用无数次,那么和组合问题的差别,其实仅在于对startIndex上的控制 题目链接:组合总和 文章讲解:代码随想录 视频讲解:带你学透回溯算法-组合总和 (39.组合总和&#xff…

从零开始构建大语言模型(MEAP)

原文:annas-archive.org/md5/c19a4ef8ab1664a3c5a59d52651430e2 译者:飞龙 协议:CC BY-NC-SA 4.0 一、理解大型语言模型 本章包括 大型语言模型(LLM)背后的基本概念的高层次解释 探索 ChatGPT 类 LLM 源自的 Transfo…

workminer之dht通信部分

workminer是通过SSH爆破传播的挖矿木马,感染后会释放xmrig挖矿程序利用主机的CPU挖取北方门罗币。该样本能够执行特定的指令,指令保存在一个配置文件config中,config文件类似于xml文件,里面有要执行的指令和参数,样本中…

spring cloud eureka 初始化报错(A bean with that name has already been defined)

报错内容 The bean ‘eurekaRegistration’, defined in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration E u r e k a C l i e n t C o n f i g u r a t i o n . c l a s s ] , c o u l d n o t b e r e g i s t e r e d . A …

回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络…

《QT实用小工具·四十五》可以在界面上游泳的小鱼

1、概述 源码放在文章末尾 该项目实现了灵动的小鱼&#xff0c;可以在界面上跟随鼠标点击自由的游泳&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "magicfish.h" #include <QtMath> #include <QPainter>…

C++:map和set的封装

关于红黑树的模拟实现&#xff0c;大家不清楚的先去看看博主的博客再来看这篇文章&#xff0c;因为set和map的封装底层都是利用用的红黑树。所以这里不会过多介绍红黑树的相关内容&#xff0c;而更多的是去为了契合STL中的红黑树去进行改造&#xff0c;让封装的set和map能够去复…