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.hqwc.cn/news/640550.html

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

相关文章

【Hadoop】-拓展:蒙特卡罗算法求PI的基础原理[10]

Monte Carlo蒙特卡罗算法(统计模拟法) Monte Carlo算法的基本思想是:以模拟的“实验”形式、以大量随机样本的统计形式,来得到问题的求解。比如,求圆周率,以数学的方式是非常复杂的,但是我们可…

探秘数据库中间件:ProxySQL与MaxScale的优势与劣势

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探秘数据库中间件:ProxySQL与MaxScale的优势与劣势 前言功能对比负载均衡故障转移查询路由使用场景和业务需求下的选择建议 性能对比响应速度并发连接数不同负载条件下的性能表现 高可用性…

广州大学《软件工程》实验报告三软件设计

广州大学学生实验报告(三) 开课学院及实验室: 学院 年级/专业/班 姓名 学号 实验课程名称 软件工程导论实验 成绩 实验项目名称 软件设计 指导老师 一、实验目的 掌握软件设计建模技术,能够撰写软件设计文…

前端入门:HTML(列表和边框案例)

1.列表知识&#xff1a; list-style-position有两个值&#xff0c;分别是inside&#xff0c;outside&#xff0c;分别表示在标签里面和在标签外面。 2.案例&#xff1a; 源代码&#xff1a; html: <body> <div class"bigBox"> <div>在线解答问题…

力扣(leetcode) 407. 接雨水 II 3D接雨水

力扣(leetcode) 407. 接雨水 II 3D接雨水 给你一个 m x n 的矩阵&#xff0c;其中的值均为非负整数&#xff0c;代表二维高度图每个单元的高度&#xff0c;请计算图中形状最多能接多少体积的雨水。 示例 1: 输入: heightMap [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 输…

【Qt】:界面优化(二:控件样式)

界面优化 一.按钮二.复选框三.输入框四.列表五.菜单栏六.登陆界面七.小结 一.按钮 二.复选框 单选框的属性与复选框一样&#xff0c;就不多演示了。 三.输入框 四.列表 关于qlineargradient&#xff1a; qlineargradient有6个参数.x1, y1:标注了一个起点.x2, y2:标注了一个终点…

【Hadoop】-Apache Hive概述 Hive架构[11]

目录 Apache Hive概述 一、分布式SQL计算-Hive 二、为什么使用Hive Hive架构 一、Hive组件 Apache Hive概述 Apache Hive是一个在Hadoop上构建的数据仓库基础设施&#xff0c;它提供了一个SQL-Like查询语言来分析和查询大规模的数据集。Hive将结构化查询语言&#xff08;…

编写一款2D CAD/CAM软件(十六)交互绘制图形

绘制步骤 以交互绘制圆形为例&#xff1a; 点击鼠标左键&#xff0c;确定圆心位置&#xff1b;抬起鼠标&#xff0c;移动鼠标&#xff0c;半径随鼠标位置变化&#xff1b;点击左键确定半径&#xff0c;完成圆的绘制。 绘制结果 Code /// j-operator-create-circle.h#pragma…

自定义表单系统开源是否好用?

在竞争激烈的社会中&#xff0c;拥有够灵活、易维护、可视化界面等优势特点的低代码技术平台获得了很多中小型企业的认可与信赖。在提升企业竞争力、办公效率和规避信息孤岛等方面具有重要的应用价值和作用。流程信息为客户提供低代码技术平台、自定义表单系统开源&#xff0c;…

Android驱动开发之如何编译和更换内核

编译内核可以使用图形化的界面配置,也可以直接使用脚本。在X86_64模拟器环境下,不用交叉编译,而交叉编译工具很容易出现兼容问题,一般也只能使用芯片厂商提供的工具,而不是GNU提供的工具。 android内核开发流程以及架构变化了很多,详情请看 内核官网 内核版本选择 由…

去雾笔记-Pixel Shuffle,逆Pixel Shuffle,棋盘效应,转置卷积

文章目录 1.Pixel Shuffle2.Inverse Pixel Shuffle3.棋盘效应4.转置卷积5.宽激活块6.PSPNet7.反射填充层&#xff08;Reflective Padding Layer&#xff09;8.tanh层 1.Pixel Shuffle Pixel Shuffle是一种用于图像超分辨率的技术&#xff0c;它通过重新排列图像的像素来增加图…

Windows 安全中心:页面不可用 你的 IT 管理员已限制对此应用的某些区域的访问,并且你尝试访问的项目不可用。有关详细信息,请与 IT 支持人员联系。

问题 1&#xff1a;Windows 安全中心提示&#xff1a;【页面不可用 你的 IT 管理员已限制对此应用的某些区域的访问&#xff0c;并且你尝试访问的项目不可用。有关详细信息&#xff0c;请与 IT 支持人员联系。】 修复 Microsoft.SecHealthUI 方法 1&#xff1a;命令自动重装安…