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:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 从Python中的字典列表中查找特定值

    我的字典列表中有以下数据 data I versicolor 0 Sepal Length 7 9 I setosa 0 I virginica 1 I versicolor 0 I setosa 1 I virginica 0 Sepal
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • Python:XML 内所有标签名称中的字符串替换(将连字符替换为下划线)

    我有一个格式不太好的 XML 标签名称内有连字符 我想用下划线替换它 以便能够与 lxml objectify 一起使用 我想替换所有标签名称 包括嵌套的子标签 示例 XML
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • 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案