设计井字棋游戏(一)
创建游戏登录注册窗口
用户名admin 密码admin(可自行改变)
主页面
1. 导包
import pickle:导入 pickle 模块,这是一个 Python 的内置模块,用于将 Python 对象序列化和反序列化。序列化是指将对象转换为字节流,以便可以将其保存到文件或数据库中,或者通过网络传输。
from PIL import Image:从 PIL(Python Imaging Library)模块导入 Image 类。PIL 是一个用于处理图像的第三方库,它提供了广泛的图像处理功能,包括打开、修改和保存不同格式的图像文件。
from tkinter import messagebox:从 tkinter 模块导入 messagebox 子模块。messagebox 提供了显示消息框的函数,这些消息框用于显示警告、错误消息、提示等。
pickle 来存储用户信息,tkinter 来创建用户界面,PIL 来处理图像,以及 messagebox 来显示消息框。
import pickle
import subprocess
import tkinter as tk
from PIL import Image
from tkinter import messagebox
- 创建游戏窗口并实现可视化,设置其名称大小,并将窗口循环显示。
win=tk.Tk()
win.title('Welcome')
win.geometry('500x400')#将窗口循环显示win.mainloop()
2. 设置加载图片到登录窗口
首先导包,一定要在上面添加此语法,否则图片将无法显示出来
from PIL import Image
以下为加载图片到窗口中,对齐居中设置(要注意图片要和文件平级在一个下面,否则将不可以显示)
img = Image.open("welcome.gif")
photo_img = tk.PhotoImage(file="welcome.gif")
label = tk.Label(image=photo_img)
label.pack()
3. 在游戏窗口内设置两个标签分别为User name和Password并绘制出其对应的输入框
#两个输入框名称
l2 = tk.Label(win, text="User name",width=10, height=1,font=6)
l2.place(x = 80, y = 160)
l3 = tk.Label(win,text="Password",width=10, height=1, font=6)
l3.place(x = 75, y = 200)
#两个输入框
entry1 = tk.Entry(win, width=25)
entry1.place(x = 220, y = 165)
entry2 = tk.Entry(win, width=25)
entry2.place(x = 220,y = 205)
4. 设置用户名
定义初始名为example@python.com,让其在User name输入框中显示
var_usr_name=tk.StringVar()
var_usr_name.set('example@python.com')
entry_usr_name=tk.Entry(win,textvariable=var_usr_name)
entry_usr_name.place(x=220,y=165)
5. 设置密码输入变为*******(隐藏密码不显示)
通过tk.StringVar()来设置隐藏密码,并让其在Password输入框中显示
var_usr_pwd=tk.StringVar()
entry_usr_pwd=tk.Entry(win,textvariable=var_usr_pwd,show='*')
entry_usr_pwd.place(x=220,y=205)
6. 分别定义usr_login()和usr_sign_up()函数
def usr_login ():passdef usr_sign_up():pass
7.在窗口中设置两个按钮分别为Login和 Sign up,并利用command实现点击触发连接
btn_login=tk.Button(win,text='Login',command=usr_login)
btn_login.place(x=170,y=260)
btn_sign_up=tk.Button(win,text='Sign up',command=usr_sign_up)
btn_sign_up.place(x=270,y=260)
单独创建一个注册页面
- 创建游戏窗口并实现可视化,设置其名称大小,并将窗口循环显示。
import tkinter as tk
#设置窗口
win1=tk.Tk()
win1.title('重置密码')
win1.geometry('450x300')#将窗口循环显示win.mainloop()
2.在窗口中设置三个标签和其对应的输入框,三个标签分别命名User name、Password、Confirm password。
#设置标签名称
tk.Label(win1,text='User name :',font=10).place(x=30,y=30)
tk.Label(win1,text='Password :',font=3).place(x=30,y=90)
tk.Label(win1,text='Confirm password :',font=1).place(x=30,y=150)
#设置三个输入框
entry1 = tk.Entry(win1, width=25)
entry1.place(x = 230, y = 30)
entry2 = tk.Entry(win1, width=25)
entry2.place(x = 230,y = 90)
entry3 = tk.Entry(win1, width=25)
entry3.place(x = 230, y = 150)
3. 设置密码输入变为*******(隐藏密码不显示
通过tk.StringVar()来设置隐藏密码,并让其在Password和confirm password输入框中显示。
var_Password=tk.StringVar()
entry_Password=tk.Entry(win1,textvariable=var_Password,show='*')
entry_Password.place(x = 230,y = 90)
var_Confirm=tk.StringVar()
entry_Confirm=tk.Entry(win1,textvariable=var_Confirm,show='*')
entry_Confirm.place(x = 230, y = 150)
4.定义按钮,命名为Sign up,设置其xy位置
btn_sign_up=tk.Button(win1,text='Sign up',command=usr_sign_up)
btn_sign_up.place(x=180,y=200)
将游戏登录窗口和注册页面进行连接
- 将刚刚定义的usr_login()函数加以完善,使得其在点击时可弹出提示框,利用get()得到输入框内的用户输入
usr_name = var_usr_name.get()
usr_pwd = var_usr_pwd.get()print(usr_name)
2. 通过try.. .. except来实现报错提示,FileNotFoundError为报错类型
try:with open('usrs_info.pickle', 'rb')as usr_file:print('1')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'}pickle.dump(usrs_info, usr_file) # 序列化print('OK')print('usr_name:', usr_name)
3. 再使用if....else语句实现提示窗口的循环交替显示
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='您的密码出错了!!请重新输入')else:print(4)is_sign_up = tk.messagebox.askyesno(title='Welcome', message='您还没有注册!需要去注册吗!')if is_sign_up:usr_sign_up()
4.再将刚刚定义的usr_sign_up()函数进行完善,从而实现与注册界面的连接。
点击按钮输出“开始注册吧”字样
def usr_sign_up():print("开始注册吧")
在usr_sign_up()函数中再定义sign_up()函数,
def sign_up():nn = entry1.get()np = entry2.get()npf = entry3.get()
通过用户的输入得到注册信息,并打开创建usrs_info.pickle文件
with open('usrs_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)
通过if…else语句实现报错或创建成功的提示
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] = np
打开usrs_info.pickle,显示您已成功注册的提示框
with open('usrs_info.pickle','wb')as usr_file:pickle.dump(exist_usr_info,usr_file)tk.messagebox.showinfo('Welcome','You have successfully signed up!')btn_sign_up.destroy()
5. 导入之前创建的注册页面(将之前创建的代码复制到)usr_sign_up()函数中。
代码参考上面的单独创建注册页面。
创建游戏窗口
创建游戏窗口并实现可视化,设置其名称大小,并将窗口循环显示。
window = tk.Tk()
window.title('Welcome')
window.geometry('400x500')window.mainloop()
相关文章:
设计井字棋游戏(一)
创建游戏登录注册窗口 用户名admin 密码admin(可自行改变) 主页面 1. 导包 import pickle:导入 pickle 模块,这是一个 Python 的内置模块,用于将 Python 对象序列化和反序列化。序列化是指将对象转换为字节流&am…...

华为手机卡顿(仅针对于部分人来说,我也不清楚是否真的有用)
关机! 之前一段时间手机变得特别卡顿,然后网上搜了一堆教程一点用没有,结果因为昨天下午在考试所以把手机关机了一个多小时,再打开之后手机就变得很流畅,原因不详,但效果显著,如有需要可尝试一…...

7、按钮无法点击
不能点击,打开f12,删除disabled...

开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)
本文学习并分析App.Hosting项目中后台管理页面的文章管理页面。 文章管理页面用于显示、检索、新建、编辑、删除文章数据,以便在前台页面的首页、文章专栏、文章详情页面显示文章数据。文章管理页面附带一新建及编辑页面,以支撑新建和编辑文章数据。…...

第七节 ConfigurationClassParser 源码分析
tips: ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解,有难度和深度,也枯燥乏味,可以根据实际情况选择阅读。 位置:org.springframework.context.annotation.ConfigurationClassPars…...

零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
目录 DAY42 1049.最后一块石头的重量II 解题思路&代码 494.目标和 解题思路&代码 474.一和零 解题思路&代码 DAY42 1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度:中等 有一堆石头,每块石头的重量都是正整…...

2024-5-24 石群电路-15
2024-5-24,星期五,22:15,天气:晴,心情:晴。今天最后一天上班,终于要放返校假啦,开心!!!!!!不过放假也不能耽误…...
功能测试:核心原理、挑战以及解决之道
在软件开发生命周期中,功能测试占据了至关重要的位置。它是确保软件应用按照既定的要求和规格运行的关键测试阶段。功能测试的目的在于验证软件的功能、行为和用户界面等是否达到了业务需求的标准。本文将深入探讨功能测试的概念,执行过程中可能遇到的挑…...

跨境电商赛道,云手机到底能不能化繁为简?
当下国内电商背景: 从零售额的数据来看:随着互联网的普及和消费者购物习惯的改变,国内电商市场规模持续扩大。据相关数据显示,网络消费亮点纷呈,一季度全国网上零售额达到了3.3万亿元,同比增长12.4%。这表…...

linux:信号深入理解
文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…...
Android系统的/etc/mkshrc文件
/etc/mkshrc 文件是用于配置 mksh(MirBSD Korn Shell)环境的启动脚本。mksh 是 Android 默认使用的 shell,在 shell 启动时会读取并执行这个文件中的配置。以下是关于 /etc/mkshrc 文件的详细信息及其用途。 /etc/mkshrc 文件的作用 环境配…...

LeetCode199二叉树的右视图
题目描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 解析 这一题的关键其实就是找到怎么去得到当前是哪一层级,可以利用队列对二叉树进行层次遍历,但…...
JavaScript 基础
一 JavaScript 的书写形式 1.1 行内式 <input type"button" value"点我一下" onclick"alert(hello akai);" > 注意,JS 中的字符串常量可以用单引号表示,也可以使用双引号表示.HTML 中推荐使用双引号,JS 中推荐使用单引号(使用双引号容易…...

DOS学习-目录与文件应用操作经典案例-type
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 1. 查看文本文件内容 2. 同时查看多个文本文件内容 3. 合并文…...

QT教程-一,初识QT
目录 一,QT是什么?能够使用它做什么? 二,Qt 能够使用的语言 三,Qt主要用于什么领域? 四,Qt开发的软件 一,QT是什么?能够使用它做什么? Qt是一个跨平台的 C 开发库,主…...

SpringBoot搭建Eureka注册中心
系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 1、Spring-Cloud Euraka介绍 Spring-Cloud Euraka是Spring Cloud集合中一…...

day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树
435.无重叠区间 思路 为了使区间尽可能的重叠所以排序来使区间尽量的重叠,使用左边界排序来统计重叠区间的个数与452. 用最少数量的箭引爆气球恰好相反。 代码 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(a,…...

ssm/springoot养老院问诊服务预约系统_96316老年人服务系统
2.管理员: (1)登入注册页面:管理员进行操作时需要是已注册登入的 (2)权限管理:管理员登入后可以运用权限进行相应的操作管理。 (3)用户管理:对用户进行删除、…...
WordPress插件优化对提升性能有多大影响?
WordPress插件优化对提升性能的影响可以是非常显著的。插件是WordPress平台的一个重要组成部分,它们可以增强网站的功能和定制性。然而,如果插件没有经过优化,它们可能会成为网站性能的瓶颈。 通过优化插件,可以减少对服务器资源…...

Servlet的response对象
目录 HTTP响应报文协议 reponse继承体系 reponse的方法 响应行 public void setStatus(int sc) 响应头 public void setHeader(String name, String value) 响应体 public java.io.PrintWriter getWriter() public ServletOutputStream getOutputStream() 请求重定…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...