猫史档案馆


【Python作品分享】记忆翻牌【作品秀】

用户:小黄124小黄124查看:0 回复:0 评论:0 创建时间:2020-09-12T19:49:52


【作品展示】

center_image

 

【作品介绍】

我的第一个发布的py作品

 

【作品源代码】

# 导入sys系统工具库
import sys

# 导入界面小工具库
from PySide2.QtWidgets import *
# 导入QtCore库
from PySide2.QtCore import *
# 导入QtGui库里面的QIcon
from PySide2.QtGui import QIcon
# 导入自定义UI库
from ui_cards import Ui_Cards

# 定义自己类MyCards,继承QMainWindow,Ui_Cards
class MyCards(QMainWindow,Ui_Cards):
    # 定义类的初始化方法
    # self代表定义类的对象的自身引用
    def __init__(self):
        # 调用父类初始化方法
        super().__init__()
        # 设置界面Ui
        self.setupUi(self)
        # 调用自身初始化按钮
        self.init_button()
        # 初始化图片
        self.init_img()
        # 显示自身界面
        self.show()

        # 定义点击开始计数的变量
        self.clicked_num = 0
        # 定义两个图片组合对象
        self.match_img = {
            1:{
                "pbtn":None, # 定义第一个按钮
                "pbtn_img": None # 定义第一个图片
            },
            2:{
                "pbtn": None, #定义第二个按钮
                "pbtn_img":None # 定义第二个图片
            },
        }

        #  定义是否第一个点击
        self.first_clicked = True
        
        # 定义计时器 
        self.time = 0

        # 正确匹配次数计数
        self.right_count = 0

        # 图片点击之后按钮换成对应背景图片(pbtn_func)
        self.pbtn_img.buttonClicked.connect(self.pbtn_func)
    
    # 初始化图片
    def init_button(self):
        # 获取初始化按钮图片
        pbtn_list = self.pbtn_img.buttons()
        # 循环遍历处理所有按钮图片
        for btn in pbtn_list:
            # 设置每个按钮图片上面展示空文本
            btn.setText("")
            # 设置每个按钮图片上面展示空背景图片
            btn.setIcon(QIcon("bg.png"))
            # 设置每个按钮图片大小设置为150*150
            btn.setIconSize(QSize(150, 150))
            # 设置每个按钮图片大小设置为可选择(以及点击)
            btn.setCheckable(True)

    # 初始化图片
    def init_img(self):
        # 导入文件系统方法的os库
        import os
        # 导入随机数random库
        import random
        # 导入图片的类型限制如下类型
        images_type = [".png",".jpg",".bmp",".jpeg"]
        # 打开images文件夹,并把文件夹中图片文件赋值给files
        files = os.listdir("images")
        # 所有匹配图片变量
        all_imgs = []
        # 遍历images下面的文件对象files
        for file in files:
            # 切分提取文件的扩展名
            ext = os.path.splitext(file)[-1]
            # 如果扩展名匹配[".png",".jpg",".bmp",".jpeg"],则把匹配的图片文件追加到all_imgs图片数组对象结尾
            if ext in images_type:
                # 把匹配的图片文件追加到all_imgs图片数组对象结尾
                all_imgs.append("images" + os.sep + file)

        # 采集获取随机六个图片
        random_imgs = random.sample(all_imgs,6)
        # 把采集的六个图片复制一份,得到双倍的图片(12个)
        grid_imgs = random_imgs + random_imgs
        # 打乱图片的顺序
        random.shuffle(grid_imgs)
        # 把图片按钮值赋值给pbtn_list参数变量
        pbtn_list = self.pbtn_img.buttons()
        # 建立按钮和图片的关联,方便点击按钮的时候触发打开相应路径的图片
        self.grids = dict(zip(pbtn_list,grid_imgs))
    
    # 计时切换图片方法
    def pbtn_func(self):
        # 如果第一次点击,开始计时器
        if self.first_clicked:
            # 默认第一次点击为false(默认没点)
            self.first_clicked = False
            # 定义计时器类QTimer的对象self.timer
            self.timer = QTimer()
            # 如果timer超时了连接调用update_time方法
            self.timer.timeout.connect(self.update_time)
            # 开始计时(1000毫秒,就是1秒)
            self.timer.start(1000)

        # 如果点击数小于2
        if self.clicked_num < 2:
            # 触发处理时间函数
            QApplication.processEvents()
            # 调用图片按钮的切换按钮方法
            pbtn = self.pbtn_img.checkedButton()
            # 计数器自喵置图片按钮
            pbtn.setIcon(QIcon(self.grids[pbtn]))
            # 设置按钮不可点击
            pbtn.setEnabled(False)
            # 第一次点击匹配的按钮和第二次匹配的按钮分别把按钮赋值给对应变量
            self.match_img[self.clicked_num]["pbtn"] = pbtn
            # 第一次点击匹配的按钮和第二次匹配的按钮对应的图片进行赋值
            self.match_img[self.clicked_num]["pbtn_img"] = self.grids[pbtn]
            # 定义第二个计时器
            timer = QTimer()
            # 点了之后进行判断计算
            timer.singleShot(500,self.judge)

    # 关键逻辑计算
    def judge(self):
        # 判断是不是点击了2次
        if self.clicked_num == 2:
            # 如果点击了2此,则重置为0
            self.clicked_num = 0
            # 如果两次点击的图片不一样
            if self.match_img[1]["pbtn_img"] != self.match_img[2]["pbtn_img"]:
                # 则重置两个按钮的状态
                self.match_img[1]["pbtn"].setEnabled(True)
                self.match_img[2]["pbtn"].setEnabled(True)
                # 重置背景图片为默认的空图片
                self.match_img[1]["pbtn"].setIcon(QIcon("bg.png"))
                self.match_img[2]["pbtn"].setIcon(QIcon("bg.png"))
            else:
                # 如果匹配上了,正确数加1
                self.right_count += 1
                # 如果匹配6个(全对了)
                if self.right_count == 6:
                    # 停止计数器
                    self.tmer.stop()

    # 修改上面的计数器展示界面
    def update_time(self):
        # 时间计数器自加1
        self.time += 1
        # 显示计算机之后的计数器数值
        self.lcd_time.display(self.time)

# 主程序入口(开始)
if __name__ == "__main__":
    # 定义全局的QApplication类的对象app
    app = QApplication(sys.argv)
    # 定义一个MyCards类的对象变量window
    window = MyCards()
    # 执行完毕结束的处理函数
    sys.exit(app.exec_())

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页