Python GUI案例之看图猜成语开发(第二篇)

2023-11-20

Python GUI案例之看图猜成语开发(第一篇)
Python GUI案例之看图猜成语开发(第三篇)
Python GUI案例之看图猜成语开发(完结篇)


前言

我们将要实现这些功能:

  • 一,游戏首页页面:在首页页面里需要实现绘制一个看图猜成语文字的标题,定义两个按钮功能(开始游戏,退出游戏),还有一个输入游戏昵称的功能并且要对昵称进行验证是否为空,才能开始游戏;
  • 二,游戏选择模式页面:在首页点击开始游戏后,进入游戏的选择模式页面,分为训练模式和闯关模式两种;
  • 三,游戏训练模式页面:将成语图片加载后,只实现猜成语功能(一张图片,一个输入框,一个按钮)和回答的准确率;
  • 四,游戏闯关模式页面:将实现自定义有多少个关卡数,16个汉字提示(12个随机生成的干扰汉字),游戏通关记录所用的时间。

(素材提取:https://download.csdn.net/download/qq_59142194/85827790


看图猜成语小程序开发(第二篇)


游戏选择模式页面

这个页面很简单,只在页面上创建两个标签字样,分为训练模式和闯关模式,并实现标签绑定鼠标点击事件功能。

效果实现

在这里插入图片描述

代码实现
l1.bind(“”,self.game_train_mode)、l2.bind(“”, self.game_chuangguan_mode)主要实现绑定鼠标点击功能(鼠标左键)。

#游戏模式选择页面
class game_modeSelection_page(ttkbootstrapWindow):
    def __init__(self,nickname):
        super().__init__()
        self.nickname = nickname
        self.page()
    def page(self):
        self.window_middle(500,300)
        self.frame = ttk.Frame(self.root)
        self.frame.pack(fill=BOTH, expand=YES)
        self.bg = ttk.PhotoImage(file='../sucai/bg2.png')
        ttk.Label(self.frame,anchor='nw', image=self.bg).pack()
        l1 = ttk.Label(self.frame,text='训练模式', font=('华文行楷', 32),relief=RAISED,cursor='hand2',bootstyle=WARNING,background='#324762')
        l1.place(x=150,y=60)
        l1.bind("<Button-1>",self.game_train_mode)
        l2 = ttk.Label(self.frame, text='闯关模式', font=('华文行楷', 32),relief=RAISED,cursor='hand2',bootstyle=SUCCESS,background='#324762')
        l2.place(x=150, y=140)
        l2.bind("<Button-1>", self.game_chuangguan_mode)
    def game_train_mode(self,event):
        print('游戏训练模式')
    def game_chuangguan_mode(self,event):
        print('游戏闯关模式')

游戏训练模式页面

将成语图片加载后,只实现猜成语功能(一张图片,一个输入框,一个按钮)和回答的准确率。
在这里插入图片描述

其实在实现上面的功能前,我把其中这部分单独提取了出来,这样可以方便在后面的闯关模式中直接调用(因为在这两种模式下,它们的背景加载、上面字样提示及返回按钮都是共有的)。

在这里插入图片描述

代码实现
这里面的代码也很简单。

class game_same_components(ttkbootstrapWindow):
    def __init__(self):
        super().__init__()
    def same_page(self,nickname):
        self.nickname = nickname
        self.window_middle(960, 540)
        self.canvas = ttk.Canvas(self.root)
        self.canvas.pack(fill=BOTH, expand=YES)
        self.bg = ttk.PhotoImage(file='../sucai/bg3.png')
        self.canvas.create_image(0, 35, anchor='nw', image=self.bg)
        self.canvas.create_rectangle(0, 0, 960, 35, fill='#F4F4F4', outline='#F4F4F4')
        nickname_lable = ttk.Label(self.canvas, text=f'欢迎:【{self.nickname}】玩家上线', font=20, bootstyle=INFO,background='#F4F4F4')
        nickname_lable.place(x=960, y=4)
        def nickname_lable_move(rate):
            rate += 5
            nickname_lable.place(x=960 - rate, y=4)
            if rate < 960:
                nickname_lable.after(50, nickname_lable_move, rate % 960)
        nickname_lable_move(0)
        self.return_button_img = ttk.PhotoImage(file='../sucai/return.png')
        self.return_button = ttk.Button(self.canvas, bootstyle=(LIGHT, "outline-toolbutton"), image=self.return_button_img,command=self.return_game_modeSelection_page)
        self.return_button.place(x=0, y=35)
    def return_game_modeSelection_page(self):
        self.canvas.destroy()
        game_modeSelection_page(self.nickname)

好了,我们提取出共有的功能后就可以开始完成训练模式的功能了。
主要是实现回答的准确率地计算
我们先定义两个变量
answer_times = 0 # 记录回答总次数
answer_correct_times = 0 # 记录回答正确次数

先创建一个标签(self.accuracy_lable2)用于显示准确率,在输入框中输入成语后键盘回车或者鼠标点击按钮绑定下面这个answer()方法。实现记录只要执行一次这个answer()方法则answer_times += 1(# 记录回答总次数),如果我们在输入框中输入的答案成语和真实的答案一致,就将answer_correct_times += 1( # 记录回答正确次数),反之,回答错误(answer_correct_times)就不加1。
这样我们就可以通过answer_correct_times / answer_times来进行计算准确率
(round((self.answer_correct_times / self.answer_times) * 100, 2) ,百分比并保留两位小数)

并且回答正确后也将自动进行到下一关,执行(self.loading_idiom_img()方法)。

	self.answer_idiom_entry.bind("<Return>", lambda event: self.answer())
    answer_times = 0  # 记录回答总次数
    answer_correct_times = 0  # 记录回答正确次数
    # 判断答案是否正确
    def answer(self):
        if self.answer_idiom_entry.get().strip():
            self.answer_times += 1
            if self.answer_idiom_entry.get().strip() == self.idiom_result:
                Messagebox.show_info(message="恭喜,回答正确!!!")
                self.loading_idiom_img()
                self.answer_idiom_entry.delete(0,'end')
                self.answer_correct_times += 1
            else:
                if not Messagebox.yesno(message="回答错误!!!\n是否继续回答?") == 'Yes':
                    self.loading_idiom_img()
                    self.answer_idiom_entry.delete(0, 'end')
            self.accuracy_lable2.config(text=f'{round((self.answer_correct_times / self.answer_times) * 100, 2)}%')

所以还要写个self.loading_idiom_img()方法,方法里面每次加载出的图片是由random.choice(os.listdir(‘…/看图猜成语’))看图猜成语文件夹下随机选取的一张图片。

#加载成语图片
    def loading_idiom_img(self):
        self.loading_img_times += 1
        self.idiom = random.choice(os.listdir('../看图猜成语'))
        self.result = self.idiom.split('.')[0]
        print('答案:',self.result)
        self.idiom_img = ttk.PhotoImage(file=f'../看图猜成语/{self.idiom}')
        lm = ttk.Label(self.canvas,image=self.idiom_img)
        lm.place(x=215,y=115)
        guanqia_lable = ttk.Label(self.canvas, font=('华文行楷', 32),background='#48A6B0')
        guanqia_lable.place(x=300,y=450)
        guanqia_lable.config(text=f'第 {self.loading_img_times} 关')

到了这里,游戏训练模式中主要代码就这些了,至于这部分的完整代码就不cv下来了,到后面我会把全部的代码贴出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python GUI案例之看图猜成语开发(第二篇) 的相关文章

  • 在 Python 中解析 TCL 列表

    我需要在双括号上拆分以空格分隔的 TCL 列表 例如 OUTPUT 172 25 50 10 01 01 Ethernet 172 25 50 10 01 02 Ethernet Traffic Item 1 172 25 50 10 01
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 打印包含字符串和其他 2 个变量的变量

    var a 8 var b 3 var c hello my name is var a and var b bye print var c 当我运行程序时 var c 会像这样打印出来 hello my name is 8 and 3 b
  • 如何将特定范围内的标量添加到 numpy 数组?

    有没有一种更简单 更节省内存的方法可以单独在 numpy 中执行以下操作 import numpy as np ar np array a l r ar c a a 0 l ar tolist a r 它可能看起来很原始 但它涉及获取给定数
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • Python - 如何确定解析的 XML 元素的层次结构级别?

    我正在尝试使用 Python 解析 XML 文件中具有特定标记的元素并生成输出 excel 文档 该文档将包含元素并保留其层次结构 我的问题是我无法弄清楚每个元素 解析器在其上迭代 的嵌套深度 XML 示例摘录 3 个元素 它们可以任意嵌套
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • JSON parse error: Invalid UTF-8 解决办法系列

    今天在本地测试通过的代码 部署之Tomcat 服务器 前端同事给我反馈如下的错误信息 Request exception org springframework http converter HttpMessageNotReadableEx
  • mciSendString函数

    mciSendString open1 GetBuffer open1 GetLength buf sizeof buf NULL 来自
  • tinystl实现(第七步:Utility.h)

    经过长时间的学习终于可以开始tinystl的仿 chao 写工作了 本文参考了这位大佬的github 坦白讲我只是补充了注释 因为tinystl的代码真的非常经典而我又没什么这种大型项目的经验 所以只能这样做 不过相信能够有助于大家的学习
  • 图像加权运算

    import os import re import cv2 cv2 imshow image img 显示 cv2 waitKey 10000 停留 cv2 destroyAllWindows 关闭 from PIL import Ima
  • java 开源 聊天机器人_用Java实现基于Web端的AI机器人聊天

    本文详细介绍了如何用Java实现Web聊天机器人 通过创建一个新项目来学习一下 一 创建一个新项目 添加所需的依赖项 打开pom xml文件在IDE中 将下列内容添加到区域 JCenterhttps jcenter bintray com
  • 去国企1年后,我后悔了!重回大厂内卷

    文章来源 cnblogs com peiyu1988 html 01 前言 2019年初 我通过一整天的笔试及面试加入一家 某一线城市国资委全资控股 某集团的研究机构 中央研究院 任职高级软件工程师 中级职称 在这边工作了整整一年 目前已经
  • 图的深度优先遍历(非递归+递归,详解)

    图的深度优先遍历 非递归算法 include
  • 关于JAVA中LIST元素修改的一个问题记录

    在工作中有遇到一个问题 需要从既有获取数据库中的LIST数据 做一下对其中部分数据做处理存入另外一个LIST集合之中 但是 有些现象还是比较出乎我的意料的 模拟了一下相关场景 具体的代码如下 package com interview de
  • 程序员工作压力大,为什么还这么多人想做程序员?是因为喜欢吗?

    最近过年遇到很多亲戚和朋友 不知道大家的身边是怎样的 阿粉身边的亲戚朋友从事计算机相关的还是挺少的 很多还是从事一些传统行业 最近跟一个亲戚聊天的时候就聊到网上对程序员的一些刻板影响 什么格子衫呀 拖鞋短裤呀 脱发以及 35 岁劝退等这些东
  • 故障分析系列(01) —— scrapy爬虫速度突然变慢原因分析

    故障分析系列 01 scrapy爬虫速度突然变慢原因分析 1 问题背景 在所有环境都没变的情况下 scrapy爬虫每天能爬取的数据量从3月5号开始急剧减少 后面几天数据量也是越来越少 2 环境 系统 win7 python 3 6 1 sc
  • visual studio:是否统一换行符 提示弹窗是否显示

    工具 选项 环境 文档 加载时检查一致的行尾
  • 推荐一篇详细的Nginx 配置清单

    Nginx 是一个高性能的 HTTP 和反向代理 web 服务器 同时也提供了 IMAP POP3 SMTP 服务 其因丰富的功能集 稳定性 示例配置文件和低系统资源的消耗受到了开发者的欢迎 本文 我们总结了一些常用的 Nginx 配置代码
  • Obsidian 入门使用手册

    文章目录 一 Obsidian 入门 1 1 什么是 Obsidian 1 2 安装 Obsidian 二 Obsidian 配置 2 1 创建第一个笔记 2 2 设置界面语言使用中文 2 3 主题 三 小结 一 Obsidian 入门 1
  • VScode配置文档

    vscode配置 常用插件 View In Browser 预览页面 ctrl F1 vscode icons 侧栏的图标 对于一个有视觉强迫症的人是必须要的 HTML Snippets 支持HTML5的标签提示 JS CSS HTML F
  • 泰凌微 IDE使用心得

    Telink IDE 1 5 这可能是我用过最难用的IDE 没有之一
  • ARL资产侦察灯塔系统搭建及使用

    ARL资产侦察灯塔系统搭建及使用 ARL Asset Reconnaissance Lighthouse 资产侦查灯塔旨在快速发现并整理企业外网资产并为资产构建基础数据库 无需登录凭证或特殊访问即可主动发现并识别资产 让甲方安全团队或者渗透
  • 微机原理:汽车速度控制系统的设计与实现

    一 设计内容 汽车速度控制系统 在自行设计接口板的按键转换汽车的挡位 发光二极管显示挡位 数码管显示汽车的速度 加速控制 拨动对应的档位再拨动加速开关 数码管显示速度递增至99 加速要与档位匹配 若不匹配则 加速失效 减速控制 拨动减速开关
  • 学习DOM

    DOM的概述 DOM document object model 文档对象模型 顾名思义他就是用于操作对应的文档的 也就是操作你写的html文档 DOM是一个遵从文档流的语句 所以他是同步机制 DOM的分类 document dom操作中最
  • mybatis异常:nested exception is org.apache.ibatis.builder.BuilderException

    这里我使用的是Mybatis plus然后报的异常 接口如下 xml如下 本来以为一切正常却忽略了接收参数的实体参数名字 也就是接受参数名和xml当中的参数名不一致导致异常 其次是接参里面并没有这几个参数 以至于他也会报这种错误的
  • Python GUI案例之看图猜成语开发(第二篇)

    Python GUI案例之看图猜成语 第二篇 前言 看图猜成语小程序开发 第二篇 游戏选择模式页面 游戏训练模式页面 Python GUI案例之看图猜成语开发 第一篇 Python GUI案例之看图猜成语开发 第三篇 Python GUI案