【python】用PyQt5教你制作简单的水果抽奖机

目录

水果机模拟器的介绍

制作水果机的步骤

水果机的UI设计 

水果机的代码

UI内置代码 

 用代码对UI进行修饰

 窗体属性

启动游戏 

 Qtime的timeout事件

 窗体加载

总结 


水果机模拟器的介绍

网络上对的介绍:水果机最为常见的是在街机厅中见到的,以新颖的水果作为游戏主题,融合了博彩类游戏元素。水果机界面由24个方格拼接成一个正方形,每个方格中都有一个目标(多个不同的图形,通常为水果),且每个方格下都有一个小灯。玩家投入游戏币后,选择希望押注的目标,当玩家按下开始键后,小灯开始绕着正方形中每个格子转,当小灯停下来时,如果停在玩家押注的目标时,则玩家可赢取相应的游戏币。

我做的水果机也是按照这个原理,具有随机抽奖的功能,会在抽奖刚开始时加速,到达一定值后减速,抽到某一水果后会用文字提示,下一次抽奖时会接着从上一次停止位置开始。

制作水果机的步骤

安装PyQT5做准备工作,安装PyQt5等插件。
窗体设计搜集图片,在Qt里面进行设计。
窗体加载1.创建主窗体
2.窗体大小不能随便更改
3.显示主窗体
 
窗体属性1.创建列表,保存图片的按钮
2.再创建一个列表,保存图片的显示信息
3.设置“开始”按钮的鼠标单击cliked的槽函数。
4.生成一个范围0-图片数-1的随机整数并保存到变量。
5.定义一个布尔变量,初始值为Ture,代表开始游戏计时器执行时间间隔递减。
启动游戏1.随机生成150-250之间的数字,代表毫秒数
2.实例化计时器对象
3.设置计时器对象执行间隔时间
4.计时器对象间隔时间到期调用函数startTimer
5.启动计时器
Qtime的timeout事件1.判断当前按钮列表索引是否为0
2.设置按钮列表当前索引所在按钮图片大小变大
3.索引加一
4.判断索引是否超出按钮列表最大索引
5.判断计时器间隔时间值是减少还是增加
6.判断计时器间隔时间是否小于1毫秒
7.判断计时器间隔时间是否大于等于350毫秒
8.重新设置下一次计时器间隔时间

水果机的UI设计

从设计上告别博彩的色彩,让水果机成为适合所有人的一个选择工具。

水果机的代码

UI内置代码 

这个是用PyQt5工具设计并转化而来的代码,PyQt5具体配置请看这篇博客

http://t.csdn.cn/vleWZicon-default.png?t=M85Bhttp://t.csdn.cn/vleWZ


import random
import sys
from msilib import Dialog

import self as self
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer, QSize
from PyQt5.QtGui import QPalette, QPixmap, QBrush
from PyQt5.QtWidgets import QApplication, QMainWindow


def setInterval(self):
    """

    :param self:
    """
    pass


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(751, 536)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("水果图片/西瓜果(watermelon fruit)-ico_爱给网_aigei_com.ico"), QtGui.QIcon.Normal,
                       QtGui.QIcon.Off)
        Dialog.setWindowIcon(icon)

        self.p1_btn = QtWidgets.QPushButton(Dialog)
        self.p1_btn.setGeometry(QtCore.QRect(9, 14, 113, 109))
        self.p1_btn.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("水果图片/苹果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn.setIcon(icon1)
        self.p1_btn.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn.setFlat(True)
        self.p1_btn.setObjectName("p1_btn")

        self.p1_btn_2 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_2.setGeometry(QtCore.QRect(132, 14, 113, 109))
        self.p1_btn_2.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("水果图片/橙子.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_2.setIcon(icon2)
        self.p1_btn_2.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_2.setFlat(True)
        self.p1_btn_2.setObjectName("p1_btn_2")

        self.p1_btn_3 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_3.setGeometry(QtCore.QRect(255, 14, 113, 109))
        self.p1_btn_3.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("水果图片/蓝莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_3.setIcon(icon3)
        self.p1_btn_3.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_3.setFlat(True)
        self.p1_btn_3.setObjectName("p1_btn_3")

        self.p1_btn_4 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_4.setGeometry(QtCore.QRect(378, 14, 113, 109))
        self.p1_btn_4.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("水果图片/荔枝.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_4.setIcon(icon4)
        self.p1_btn_4.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_4.setFlat(True)
        self.p1_btn_4.setObjectName("p1_btn_4")

        self.p1_btn_5 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_5.setGeometry(QtCore.QRect(502, 14, 113, 109))
        self.p1_btn_5.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("水果图片/芒果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_5.setIcon(icon5)
        self.p1_btn_5.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_5.setFlat(True)
        self.p1_btn_5.setObjectName("p1_btn_5")

        self.p1_btn_6 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_6.setGeometry(QtCore.QRect(625, 14, 113, 109))
        self.p1_btn_6.setText("")
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("水果图片/猕猴桃.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_6.setIcon(icon6)
        self.p1_btn_6.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_6.setFlat(True)
        self.p1_btn_6.setObjectName("p1_btn_6")

        self.p1_btn_9 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_9.setGeometry(QtCore.QRect(625, 134, 113, 109))
        self.p1_btn_9.setText("")
        icon7 = QtGui.QIcon()
        icon7.addPixmap(QtGui.QPixmap("水果图片/草莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_9.setIcon(icon7)
        self.p1_btn_9.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_9.setFlat(True)
        self.p1_btn_9.setObjectName("p1_btn_9")

        self.p1_btn_16 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_16.setGeometry(QtCore.QRect(625, 254, 113, 109))
        self.p1_btn_16.setText("")
        icon8 = QtGui.QIcon()
        icon8.addPixmap(QtGui.QPixmap("水果图片/葡萄.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_16.setIcon(icon8)
        self.p1_btn_16.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_16.setFlat(True)
        self.p1_btn_16.setObjectName("p1_btn_16")

        self.p1_btn_15 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_15.setGeometry(QtCore.QRect(625, 413, 113, 109))
        self.p1_btn_15.setText("")
        icon9 = QtGui.QIcon()
        icon9.addPixmap(QtGui.QPixmap("水果图片/樱桃.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_15.setIcon(icon9)
        self.p1_btn_15.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_15.setFlat(True)
        self.p1_btn_15.setObjectName("p1_btn_15")

        self.p1_btn_13 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_13.setGeometry(QtCore.QRect(502, 413, 113, 109))
        self.p1_btn_13.setText("")
        icon10 = QtGui.QIcon()
        icon10.addPixmap(QtGui.QPixmap("水果图片/青柠.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_13.setIcon(icon10)
        self.p1_btn_13.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_13.setFlat(True)
        self.p1_btn_13.setObjectName("p1_btn_13")

        self.p1_btn_11 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_11.setGeometry(QtCore.QRect(378, 413, 113, 109))
        self.p1_btn_11.setText("")
        icon11 = QtGui.QIcon()
        icon11.addPixmap(QtGui.QPixmap("水果图片/杨梅.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_11.setIcon(icon11)
        self.p1_btn_11.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_11.setFlat(True)
        self.p1_btn_11.setObjectName("p1_btn_11")

        self.p1_btn_12 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_12.setGeometry(QtCore.QRect(255, 413, 113, 109))
        self.p1_btn_12.setText("")
        icon12 = QtGui.QIcon()
        icon12.addPixmap(QtGui.QPixmap("水果图片/香蕉.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_12.setIcon(icon12)
        self.p1_btn_12.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_12.setFlat(True)
        self.p1_btn_12.setObjectName("p1_btn_12")

        self.p1_btn_14 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_14.setGeometry(QtCore.QRect(132, 413, 113, 109))
        self.p1_btn_14.setText("")
        icon13 = QtGui.QIcon()
        icon13.addPixmap(QtGui.QPixmap("水果图片/西瓜.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_14.setIcon(icon13)
        self.p1_btn_14.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_14.setFlat(True)
        self.p1_btn_14.setObjectName("p1_btn_14")

        self.p1_btn_10 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_10.setGeometry(QtCore.QRect(9, 413, 113, 109))
        self.p1_btn_10.setText("")
        icon14= QtGui.QIcon()
        icon14.addPixmap(QtGui.QPixmap("水果图片/无花果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_10.setIcon(icon14)
        self.p1_btn_10.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_10.setFlat(True)
        self.p1_btn_10.setObjectName("p1_btn_10")

        self.p1_btn_8 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_8.setGeometry(QtCore.QRect(9, 254, 113, 109))
        self.p1_btn_8.setText("")
        icon15 = QtGui.QIcon()
        icon15.addPixmap(QtGui.QPixmap("水果图片/桃子.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_8.setIcon(icon15)
        self.p1_btn_8.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_8.setFlat(True)
        self.p1_btn_8.setObjectName("p1_btn_8")

        self.p1_btn_7 = QtWidgets.QPushButton(Dialog)
        self.p1_btn_7.setGeometry(QtCore.QRect(9, 134, 113, 109))
        self.p1_btn_7.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
        self.p1_btn_7.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
        self.p1_btn_7.setText("")
        icon16 = QtGui.QIcon()
        icon16.addPixmap(QtGui.QPixmap("水果图片/树莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p1_btn_7.setIcon(icon16)
        self.p1_btn_7.setIconSize(QtCore.QSize(100, 100))
        self.p1_btn_7.setFlat(True)
        self.p1_btn_7.setObjectName("p1_btn_7")
        self.message_lbl = QtWidgets.QLabel(Dialog)
        self.message_lbl.setGeometry(QtCore.QRect(160, 190, 441, 81))
        font = QtGui.QFont()
        font.setPointSize(20)
        font.setBold(True)
        font.setWeight(75)
        self.message_lbl.setFont(font)
        self.message_lbl.setAlignment(QtCore.Qt.AlignCenter)
        self.message_lbl.setObjectName("message_lbl")

        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(310, 310, 131, 61))
        self.pushButton.setMouseTracking(True)
        self.pushButton.setIconSize(QtCore.QSize(16, 16))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.background_color: (1.0, 0.4, 1.0, 0.0)
        self.p1_btn.raise_()
        self.p1_btn_2.raise_()
        self.p1_btn_3.raise_()
        self.p1_btn_4.raise_()
        self.p1_btn_5.raise_()
        self.p1_btn_6.raise_()
        self.p1_btn_9.raise_()
        self.p1_btn_16.raise_()
        self.p1_btn_15.raise_()
        self.p1_btn_11.raise_()
        self.p1_btn_13.raise_()
        self.p1_btn_12.raise_()
        self.p1_btn_14.raise_()
        self.p1_btn_10.raise_()
        self.p1_btn_8.raise_()
        self.p1_btn_7.raise_()
        self.message_lbl.raise_()
        self.pushButton.raise_()

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "刘佳皓的水果机"))
        self.message_lbl.setText(_translate("Dialog", "敢不敢试一试你的手气!!!"))
        self.pushButton.setText(_translate("Dialog", "5元一次"))
        # 以上代码除一些驱动外,基本都是UI里面的代码。

 用代码对UI进行修饰

 self.myInitWindow()
        """这些代码是用来对UI的一些修改,根据自己的需要,
对其中一些代码的修改,可以得到自己想要的效果。"""

        # 设置窗体透明
        # Dialog.setWindowOpacity(0.9)
        # 设置窗体的背景色
        # Dialog.setStyleSheet("#Dialog{background-color:blue}")
        # 设置列表控件的背景色
        # self.Dialog.setStyleSheet("#Dialog{background-color:LavenderBlush}")

        # 设置窗体边框固定大小
        Dialog.setFixedSize(Dialog.width(), Dialog.height())
        # 设置窗体背景图片
        palette = QPalette()
        pix = QPixmap("水果图片/桌子.jpg")
        # # 自调背景图大小和窗体适应
        pix = pix.scaled(Dialog.width(), Dialog.height())
        palette.setBrush(QPalette.Background, QBrush(pix))
        Dialog.setPalette(palette)
        self.message_lbl.setStyleSheet("color: rgb(196, 222, 255);")
        self.pushButton.setStyleSheet("color: rgb(111, 321, 123);")

 窗体属性

def myInitWindow(self):
        """

        """
        self.btns = [self.p1_btn, self.p1_btn_2, self.p1_btn_3, self.p1_btn_4,
                     self.p1_btn_5, self.p1_btn_6, self.p1_btn_9, self.p1_btn_16, self.p1_btn_15,
                     self.p1_btn_13, self.p1_btn_11, self.p1_btn_12, self.p1_btn_14, self.p1_btn_10,
                     self.p1_btn_8, self.p1_btn_7]
        self.btns_message = ["一天一苹果,医生远离我。", "橙子减少胆结石的发病率。", "蓝莓有助于防止衰老和癌症。",
                             "荔枝促进新陈代谢。", "芒果抗菌消炎。",
                             "猕猴桃使皮肤变得光滑。", "草莓助于消化,能健睥和胃。", "葡萄地阻止肾结石的形成。",
                             "樱桃明显抑制肝癌细胞增殖。", "青柠减少脂肪的沉积。。",
                             "杨梅清热解暑,解酒,利尿消肿.", "香蕉预防或治疗高血压。", "西瓜止暑解渴,健胃消食。",
                             "无花果提高睡眠质量。", "桃子利尿解暑、清热明目。", "树莓有助于保护心脏"]

        self.pushButton.clicked.connect(self.gameStart)
        self.index = random.randint(0, 16)
        self.direction = True
        # 认定Ture是递减

启动游戏 

 # 启动游戏
    def gameStart(self):
        # 随机生成毫秒数
        self.speed = random.randint(150, 250)
        # 实例化计时器对象
        self.timer = QTimer()
        # 设置计时器对象执行间隔时间
        self.timer, setInterval(self)
        # 计时器对象间隔时间到期调用函数startTimer
        self.timer.timeout.connect(self.startTimer)
        # 启动计时器
        self.timer.start()

    

 Qtime的timeout事件

# 计时器间隔时间到达执行函数
    def startTimer(self):
        # 判断当前按钮列表索引是否为0
        if self.index == 0:
            # 如果为0,索引15的按钮图片重新设置为原始大小
            self.btns[15].setIconSize(QSize(100, 100))
        # 否则
        else:
            # 索引减一的按钮图片重新设置为原始大小
            self.btns[self.index - 1].setIconSize(QSize(100, 100))
        # 设置按钮列表当前索引所在按钮图片大小变大
        self.btns[self.index].setIconSize(QSize(130, 130))
        # 索引加一
        self.index += 1
        # 判断索引是否超出按钮列表最大索引
        if self.index >= len(self.btns):
            # 如果索引超出范围,索引重新从0开始
            self.index = 0
        # 判断计时器间隔时间值是减少还是增加
        if self.direction:
            # 如果是Ture,间隔每次减少5毫秒
            self.speed -= 15
        else:
            # 如果是False,间隔每次怎加5毫秒
            self.speed += 15
        # 判断计时器间隔时间是否小于1毫秒
        if self.speed <= 1:
            # 重新设置间隔时间
            self.speed = 1
            self.direction = False

        # 重新设置下一次计时器间隔时间
        self.timer.setInterval(self.speed)
        # 判断计时器间隔时间是否大于等于300毫秒
        if self.speed >= 300:
            # 重新设置变量direction的值为Ture,代表方向减少
            self.direction = True
            # 停止
            self.timer.stop()
            self.message_lbl.setText(self.btns_message[self.index - 1])

 窗体加载

# 程序入口
if __name__ == '__main__':  # python模拟程序入口
    # 创建主窗体
    app = QApplication(sys.argv)
    # 设计的UI界面实体化
    ui = Ui_Dialog()
    # 创建主窗体对象,一个应用程序可以有多个窗体,但是一个窗体不能代表一个应用程序。
    MainWindow = QMainWindow()
    # 把所有用到的控件化在主窗体上。
    ui.setupUi(MainWindow)
    # 设置窗体大小不能更改
    MainWindow.setFixedSize(MainWindow.width(), MainWindow.height())
    # 主窗体自己的宽        #主窗体自己的高
    # 显示主窗体
    MainWindow.show()
    sys.exit(app.exec_())

这上面有很多代码时从UI上转化来的,然后再用一些代码修饰,从而让水果机“活”起来。

总结 

本项目只是简单的实现了抽奖的功能,在很多地方还有不足,比如UI的设计还可以在漂亮一些,但本人的审美不足,就只能做到这了。

我是一个Python新手,如果代码哪里有不对,或者可以简化的地方,还请各位大佬指正或建议出来,谢谢大家看到最后。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
PyQt5是一款流行的Python GUI框架,它基于Qt库开发。下面是一个简单PyQt5程,帮助您入门。 1. 安装PyQt5 在终端或命令提示符中使用pip安装PyQt5: ``` pip install PyQt5 ``` 2. 创建GUI应用程序 创建一个新的Python文件,导入PyQt5模块并创建一个Qt应用程序对象: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget app = QApplication(sys.argv) window = QWidget() window.show() sys.exit(app.exec_()) ``` 这个程序将创建一个空白窗口并显示它。 3. 添加控件 可以向窗口添加各种控件,如标签、按钮、文本框等。例如,在窗口上添加一个标签: ```python from PyQt5.QtWidgets import QLabel label = QLabel("Hello World!", window) label.move(100, 100) ``` 这将在窗口上添加一个标签,并将其移动到(100,100)的位置。 4. 处理事件 可以使用信号和插槽制处理控件的事件,例如,当单击按钮时执行某个操作。例如,在窗口上添加一个按钮并将其与一个事件处理函数相关联: ```python from PyQt5.QtWidgets import QPushButton button = QPushButton("Click me", window) button.move(100, 150) def on_button_clicked(): print("Button clicked") button.clicked.connect(on_button_clicked) ``` 这将创建一个按钮并将其命名为“Click me”。单击按钮时,将调用on_button_clicked函数。 5. 运行应用程序 最后,运行应用程序并显示窗口: ```python sys.exit(app.exec_()) ``` 这将使应用程序保持运行状态,直到用户关闭窗口或退出应用程序。 这只是一个简单PyQt5程,您可以通过阅读官方文档和查看示例代码来深入了解它的更多功能和用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-李华同学-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值