用户:
务实的熔岩龙341查看:0 回复:1 评论:0 创建时间:2021-08-30T18:41:18
【作品展示】

【作品介绍】
编程课上做的记忆配对游戏,我自己修改了一下,大家有宝贵的移间请及时提出!
【作品源代码】
try:
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
class Ui_cards(object):
def setupUi(self, cards):
if cards.objectName():
cards.setObjectName(u"cards")
cards.resize(663, 600)
self.centralwidget = QWidget(cards)
self.centralwidget.setObjectName(u"centralwidget")
self.gridLayoutWidget = QWidget(self.centralwidget)
self.gridLayoutWidget.setObjectName(u"gridLayoutWidget")
self.gridLayoutWidget.setGeometry(QRect(10, 110, 喵1, 471))
self.gridLayout = QGridLayout(self.gridLayoutWidget)
self.gridLayout.setObjectName(u"gridLayout")
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.pbtn11 = QPushButton(self.gridLayoutWidget)
self.pbtn_img = QButtonGroup(cards)
self.pbtn_img.setObjectName(u"pbtn_img")
self.pbtn_img.addButton(self.pbtn11)
self.pbtn11.setObjectName(u"pbtn11")
self.gridLayout.addWidget(self.pbtn11, 2, 2, 1, 1)
self.pbtn02 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn02)
self.pbtn02.setObjectName(u"pbtn02")
self.gridLayout.addWidget(self.pbtn02, 0, 1, 1, 1)
self.pbtn07 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn07)
self.pbtn07.setObjectName(u"pbtn07")
self.gridLayout.addWidget(self.pbtn07, 1, 2, 1, 1)
self.pbtn01 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn01)
self.pbtn01.setObjectName(u"pbtn01")
self.gridLayout.addWidget(self.pbtn01, 0, 0, 1, 1)
self.pbtn06 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn06)
self.pbtn06.setObjectName(u"pbtn06")
self.gridLayout.addWidget(self.pbtn06, 1, 1, 1, 1)
self.pbtn10 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn10)
self.pbtn10.setObjectName(u"pbtn10")
self.gridLayout.addWidget(self.pbtn10, 2, 1, 1, 1)
self.pbtn08 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn08)
self.pbtn08.setObjectName(u"pbtn08")
self.gridLayout.addWidget(self.pbtn08, 1, 3, 1, 1)
self.pbtn05 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn05)
self.pbtn05.setObjectName(u"pbtn05")
self.gridLayout.addWidget(self.pbtn05, 1, 0, 1, 1)
self.pbtn04 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn04)
self.pbtn04.setObjectName(u"pbtn04")
self.gridLayout.addWidget(self.pbtn04, 0, 3, 1, 1)
self.pbtn12 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn12)
self.pbtn12.setObjectName(u"pbtn12")
self.gridLayout.addWidget(self.pbtn12, 2, 3, 1, 1)
self.pbtn03 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn03)
self.pbtn03.setObjectName(u"pbtn03")
self.gridLayout.addWidget(self.pbtn03, 0, 2, 1, 1)
self.pbtn09 = QPushButton(self.gridLayoutWidget)
self.pbtn_img.addButton(self.pbtn09)
self.pbtn09.setObjectName(u"pbtn09")
self.gridLayout.addWidget(self.pbtn09, 2, 0, 1, 1)
self.lcd_time = QLCDNumber(self.centralwidget)
self.lcd_time.setObjectName(u"lcd_time")
self.lcd_time.setGeometry(QRect(270, 10, 201, 81))
self.label = QLabel(self.centralwidget)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(150, 30, 101, 41))
font = QFont()
font.setPointSize(30)
self.label.setFont(font)
self.label.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
self.label_2 = QLabel(self.centralwidget)
self.label_2.setObjectName(u"label_2")
self.label_2.setGeometry(QRect(490, 50, 81, 41))
font1 = QFont()
font1.setPointSize(25)
font1.setBold(True)
font1.setItalic(False)
font1.setWeight(75);
self.label_2.setFont(font1)
cards.setCentralWidget(self.centralwidget)
self.retranslateUi(cards)
QMetaObject.connectSlotsByName(cards)
# setupUi
def retranslateUi(self, cards):
cards.setWindowTitle(QCoreApplication.translate("cards", u"记忆配对", None))
icon = QIcon('.\images\袋鼠.png')
self.setWindowIcon(icon)
self.pbtn11.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn02.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn07.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn01.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn06.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn10.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn08.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn05.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn04.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn12.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn03.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.pbtn09.setText(QCoreApplication.translate("cards", u"PushButton", None))
self.label.setText(QCoreApplication.translate("cards", u"Time", None))
self.label_2.setText(QCoreApplication.translate("cards", u"s", None))
# retranslateUi
class MyCards(QMainWindow, Ui_cards):
def __init__(self):
super().__init__()
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
self.pbtn_img.buttonClicked.connect(self.pbtn_func)
self.resizeable = QTimer()
self.resizeable.start(0)
self.resizeable.timeout.connect(self.resize_)
def resize_(self):
self.resize(663, 600)
def init_button(self):
pbtn_list = self.pbtn_img.buttons()
for btn in pbtn_list:
btn.setText('')
btn.setIcon(QIcon('bg.png'))
btn.setIconSize(QSize(150, 150))
btn.setCheckable(True)
def init_img(self):
import os
import random
type_ = random.choice(['动物', '喵'])
images_type = ['.png', '.jpg', '.bmp', '.jpeg']
all_imgs = []
files = os.listdir('.\\images\\' + type_ + '\\')
for file in files:
ext = os.path.splitext(file)[-1]
if ext in images_type:
all_imgs.append('.\\images\\' + type_ + '\\' + file)
ramdom_imgs = random.sample(all_imgs, 6)
grid_imgs = ramdom_imgs + ramdom_imgs
random.shuffle(grid_imgs)
pbtn_list = self.pbtn_img.buttons()
self.grids = dict(zip(pbtn_list, grid_imgs))
def pbtn_func(self):
if self.first_clicked:
self.first_clicked = False
self.timer = QTimer()
self.timer.timeout.connect(self.update_time)
self.timer.start(100)
if self.clicked_num < 2:
QApplication.processEvents()
pbtn = self.pbtn_img.checkedButton()
if pbtn != self.match_img[1]['pbtn'] and pbtn in self.pbtn_img.buttons():
self.clicked_num += 1
pbtn.setIcon(QIcon(self.grids[pbtn]))
self.match_img[self.clicked_num]['pbtn'] = pbtn
self.match_img[self.clicked_num]['pbtn_img'] = self.grids[pbtn]
timer = QTimer()
timer.singleShot(200, self.judge)
def judge(self):
if self.clicked_num == 2:
self.clicked_num = 0
if self.match_img[1]['pbtn_img'] != self.match_img[2]['pbtn_img']:
self.match_img[1]['pbtn'].setIcon(QIcon('bg.png'))
self.match_img[2]['pbtn'].setIcon(QIcon('bg.png'))
else:
self.pbtn_img.removeButton(self.match_img[1]['pbtn'])
self.pbtn_img.removeButton(self.match_img[2]['pbtn'])
self.right_count += 1
if self.right_count == 6:
self.timer.stop()
self.match_img[1]['pbtn'] = self.match_img[2]['pbtn'] = None
def update_time(self):
self.time += 0.1
self.lcd_time.display(self.time)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyCards()
sys.exit(app.exec_())
except Exception as e:
from PySide2.QtWidgets import *
import traceback
import logging
logging.basicConfig(filename='debug.log',
level=logging.DEBUG,
filemode='w',
format='[%(asctime)s] >>> \n\n%(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logging.error(traceback.format_exc())
QMessageBox.critical(None, '错误', '程序发生错误,请在程序所在文件夹内查看错误日志 debug.log。')
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn