IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python GUI案例之看图猜成语开发(第三篇) -> 正文阅读

[Python知识库]Python GUI案例之看图猜成语开发(第三篇)

Python GUI案例之看图猜成语(第三篇)

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


前言

我们将要实现这些功能:

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

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


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

终于来到第三篇了!!!


游戏闯关模式页面

在这里我们将实现自定义有多少个关卡数,16个汉字提示(12个随机生成的干扰汉字),游戏通关记录所用的时间,主要要注意下面3个的实现功能。

在这里插入图片描述

自定义关卡数
在自定义关卡数时(默认10关),我们需要在游戏选择模式页面中点击闯关模式后添加ttkbootstrap里面的一个查询框Querybox,然后根据提示输入关卡数后则将进入游戏闯关模式页面。

    def game_chuangguan_mode(self,event):
        # 默认10个关卡(initialvalue=10)
        number = Querybox.get_integer(prompt="请设置关卡数量:",title="自定义关卡数量 ",initialvalue=10,minvalue=0,maxvalue=50)
        if number:
            self.frame.destroy()
            game_chuangguan_page(self.nickname,number)

① 创建四个用于显示选择结果的标签,在这里还要定义一个self.answer_list 列表来装下生成的标签对象,以便后面在标签上配置文字configure()。

# 创建四个用于选择结果的标签
    def create_selection_result_label(self):
        self.answer_list = []
        for i in range(4):
            label = ttk.Label(self.canvas, text='', font=("微软雅黑", 35), background='', width=2, cursor='hand2')
            label.place(x=130 + i * 100, y=450)
            self.answer_list.append(label)

重选按钮,点击执行后就会将self.answer_list 列表里面的标签对象全部摧毁后重新创建。

 # 重选
    def update_label(self):
        self.CLICKTIMES = 0
        self.TRUEANSWER = ''
        for i in self.answer_list:i.destroy()
        self.create_selection_result_label()

② 创建用于选择文字内容的16个标签(4 x 4),其中将有12个干扰文字,并且在创建标签时还要为每一个标签对象绑定一个鼠标点击事件click_label(event)。

# 创建用于选择文字内容的标签
    def create_option_text_label(self):
        def click_label(event):
            if self.CLICKTIMES < 4:
                self.CLICKTIMES += 1
                label_text = event.widget["text"]  # 得到标签上的文本
                self.answer(label_text)
        self.label_oop_list = []
        # 设置4行4列的标签
        for i in range(4):
            for j in range(4):
                label = ttk.Label(self.canvas, text='', font=("微软雅黑", 35), background='#FFFAE3', width=2,cursor='hand2')
                label.place(x=510 + j * 100, y=90 + i * 95)
                label.bind("<Button-1>", click_label)
                self.label_oop_list.append(label)

这里也比较重要的部分,变量IDX记录第几关,loading_idiom_img()方法里面的for循环则是为前面创建的16个文字标签配置文字(包括
正确的4个文字([i for i in self.idiom])和
12个干扰文字(disturb_text_list ))

    IDX = 1  # 第几关,默认第1关
    # 加载成语图片
    def loading_idiom_img(self,):
        self.idiom = self.idiom_list[self.IDX - 1].split('.')[0]
        print('答案:', self.idiom)
        disturb_text_list = [self.GBK2312() for i in range(12)]  # 随机生成12个干扰汉字
        disturb_text_list.extend([i for i in self.idiom])
        for label_oop in self.label_oop_list:
            text = random.choice(disturb_text_list)
            disturb_text_list.remove(text)
            label_oop.configure(text=text)
        self.guanqia_lable.config(text=f'第 {self.IDX} / {len(self.idiom_list)}关')
        self.idiom_img = ttk.PhotoImage(file=f'../看图猜成语/{self.idiom}.png')
        self.lm.configure(image=self.idiom_img)

随机生成干扰文字

 # 随机生成一个汉字
    def GBK2312(self, ):
        head = random.randint(0xb0, 0xf7)
        body = random.randint(0xa1, 0xfe)
        val = f'{head:x}{body:x}'
        str = bytes.fromhex(val).decode('gb2312')
        return str

③ 记录时间,这里的写法与前面的动态移动原理都一样,都是由after()实现,间隔1秒刷新标签(time_label )一次。self.flag = True 为定义一个信号量,用于当我们完成游戏通过时,run()结束循环

# 记录通关所耗时
    def recording_time(self):
        self.flag = True  # 定义一个信号量,用于当我们完成游戏通过时,run()结束循环
        time_label = ttk.Label(self.canvas,text='时长:00:00:00', font=("华文行楷", 15), background='#DAEFE6',bootstyle=DANGER)
        time_label.place(x=730,y=50)
        start_time = datetime.datetime.now()
        def run():
            if self.flag:
                time_label.after(1000, run)
                update_time = datetime.datetime.now() - start_time
                self.time_ =f'时长:{update_time}'.split('.')[0]
                time_label.configure(text=self.time_) # 不显示时长的毫秒值
        run()

提示回答是否正确,这里用了一点线程的知识,回答正确线程启动提示“回答正确”标签,3秒后将自动消失;回答错误,同理。

在这里插入图片描述

  t = threading.Thread(target=self.dispaly_answer_result, args=('回\n答\n错\n误',))
                t.setDaemon(True)
                t.start()
    # 显示回答结果是否正确
    def dispaly_answer_result(self,text):
        self.result_label.configure(text=text)
        time.sleep(3)
        try: self.result_label.configure(text='')
        except Exception as e: print(e)

第三篇也就到这里吧!
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:49:56  更:2022-07-04 22:53:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:57:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码