前言
之前课程设计做过,当时搞得还是挺烂的,PYQT挺好用的,现在基于之前的改进,使得功能更加符合正常的抽卡模拟器需求,同时添加连接数据库。在写这个帖子的时候我还没有写数据库,因为卡牌数据的构建还有考虑一些规范。
数据库的支持详情见我的下一个帖子:【PYQT】赛马娘抽卡模拟器-基于Bwiki的抽卡模拟(下))。
实际上这个界面参考了Bwiki的赛马娘抽卡模拟:
Bwiki赛马娘抽卡模拟器
本文你可以可以查看我的博客版本,完整源码地址:DrawCard_uma
有用可以star😘
预览
功能实现
- 单抽+十连的结果图片显示
- 十连保底出现SR
- 重做界面,删除无用的登陆界面
- 可以抽取马娘池,也可以抽取支援卡池子
- 对抽卡结果的统计
- 可以自主选择卡池
- 选择不同卡池出现不同的标志性图片
- 显示公告
- 建立抽卡模拟器的数据库,建立表:卡池表,卡牌表,卡池&卡牌表,抽取结果表
- 连接数据库
- 显示抽卡记录的日志
项目结构:

QT界面预览:

QT控件表:

程序界面预览:

运行展示
由于我展示还没有创建卡牌的数据库,我只根据星级给抽卡结果进行了分类,从数据库中查找卡牌的各种信息更符合实际(但卡牌数据的构建实在过于麻烦,遂先不搞)。所以结果我做的只有外框显示就行了
具体实现
同样,我们需要将UI文件和启动的py文件分离。通过QTdesigner设计的界面,在vscode的qt插件中右键,选中“PYQT:Compile Form”,自动生成ui的py文件,之后新建一个启动器文件。这样的好处在于可以随时改变界面。
创建一个res文件夹存放图片文件,一个data文件夹存放数据文件。
start.py的源码:
import sys
import random
#PyQt5中使用的基本控件
from PyQt5.QtWidgets import QApplication, QMainWindow,QMessageBox
from PyQt5.QtGui import QPixmap
#导入designer界面
from Ui_抽卡系统 import*
class MyMainForm(QMainWindow, Ui_Form):
def __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)
#提供标题
self.setWindowTitle("抽卡模拟器")
#添加信号和槽。
self.change_cardpool.clicked.connect(self.change_pool)
self.change_cardpool_2.clicked.connect(self.change_pool_2)
self.getone.clicked.connect(self.one)
self.getten.clicked.connect(self.ten)
self.getone_2.clicked.connect(self.one_2)
self.getten_2.clicked.connect(self.ten_2)
self.askbutton.clicked.connect(self.ask)
# 加载并显示默认图片
image_path = "res/2.5th Anniversary卡池.png" #默认出现的图片
self.load_image(image_path)
image_path = "res/2.5th Anniversary支援卡池.png" #默认出现的图片
self.load_image_2(image_path)
#################### 加载图片,参数设置一个图片的路径
#马池图
def load_image(self,image_path):
pixmap = QPixmap(image_path) #变为Qpixmap对象
# 调整 QLabel 大小以适应图片
self.view_pool.setPixmap(pixmap)
self.view_pool.setScaledContents(True)
#支援卡池图
def load_image_2(self,image_path):
pixmap_2 = QPixmap(image_path) #变为Qpixmap对象
# 调整 QLabel 大小以适应图片
self.view_pool_2.setPixmap(pixmap_2)
self.view_pool_2.setScaledContents(True)
#定义改变卡池的函数
def change_pool(self):
cardpool_name=self.cardpool_Box.currentText() #读取卡池信息
self.label_cardpool.setText(cardpool_name)
image_path = "res/"+cardpool_name+".png"
self.load_image(image_path)
def change_pool_2(self)
PYQT实现赛马娘抽卡模拟器:UI设计与数据库集成

文章讲述了作者使用PYQT开发赛马娘抽卡模拟器的改进过程,包括UI设计、单抽与十连功能、结果显示、数据库连接及统计功能。作者展示了如何通过QTDesigner设计界面并分离代码,以及如何实现星级抽卡概率和结果显示。
最低0.47元/天 解锁文章
1120





