水果机(超级详细!!!)

        今天给大家带来水果机项目的制作,嗯......这个项目呢,相比于我上个博客的播放器要简单不少,但是也有一些播放器中没有出现过的新知识,大家也一定不要懈怠昂!

      这是另一个开端!   

      具体来说呢,首先大家要创建一个新项目,名字尽量自己要记住,并且记住所在的路径,避免你找不到。什么PyQt5的安装了、配置环境了,都在我上个博客,大家可以仔细阅读。

        接下来呢,是我的设计界面,整体来说满足自己的需求即可,下面是我做的,加上我的一些注释,大家也可以有一些更加新奇的想法。比如摆出不同的形状,我这里是按一个正方形摆的。

记得创建的时候,选蓝色的那个阿! 

 把下面的flat勾选中就可以去掉那个白色的边框了,具体的参数可以自个儿调整,调整自己想要的位置。 

 简单设计完之后就可以保存来生成了,要想让设计的小窗口能够运行显示出来,还要加一些代码具体如下:这个代码基本是固定死的,并且想要窗口展示出来并且不随意放大缩小的话,一般就是这些代码,大家多用几遍,熟练了就记住了。

#程序入口
if __name__ == '__main__':
    #程序对象实例化
    app=QApplication(sys.argv)
    #创建主窗体
    MainWindow=QMainWindow()
    #创建自定义窗体
    ui=Ui_Dialog()
    #将自定义窗体设计为主窗体
    ui.setupUi(MainWindow)
    #规定其宽和高
    MainWindow.setFixedSize(MainWindow.width(),MainWindow.height())
    #显示主窗体
    MainWindow.show()
    sys.exit(app.exec_())

这是我重新来了一遍之后的样子,总会有些出入的,如果有些许差异的,请大家到pycharm中进行调整具体参数。

接下来就是水果机初始化窗体属性了,其实你也要想好多,这16个按钮需要先创建1个列表保存起来,我也对每个水果加了一些提示信息,也可以放进列表中储存起来,你也应该思考从哪个图片随机开始,同时也尽量把开始按钮和鼠标进行链接。

#自定义函数来初始化窗体属性
    def myInitWindow(self):
#保存按键和信息到列表中
        self.btns=[self.p1_btn,self.p2_btn,self.p3_btn,self.p4_btn,self.p5_btn,self.p6_btn,self.p7_btn,self.p8_btn,self.p9_btn,self.p10_btn,self.p11_btn,self.p12_btn,self.p13_btn,self.p14_btn,self.p15_btn,self.p16_btn]
        self.btns_message=["橙子:富含维生素C","蓝莓:抗氧化作用","西瓜:保持水分平衡","苹果:促进心血管健康","菠萝:抗炎作用","草莓:促进消化健康","葡萄:保护视力","猕猴桃:促进肌肤健康","水蜜桃:支持免疫系统","荔枝:提供丰富的营养","柠檬:提供抗菌作用","芒果:提供能量和提升心情","榴莲:增强免疫力","车厘子:改善睡眠质量","香蕉:维持心脏健康","梨:抗炎和抗氧化作用"]
#该设计从哪里开始进入,从0到15张图片中随机一个开始
        self.index=random.randint(0,16)
#方向为True,时间递减。这个的意思呢,是方便下一步进行的,不懂可以继续往下看。
        self.direction=True
#将开始按钮连接到游戏开始自定义函数
        self.start_btn.clicked.connect(self.gameStart)

当点击开始按钮时,就会自动调用该函数 gameStart来完成接下来的操作。

下面这个自定义函数本质就是为了设置两个图片之间轮转的间隔时间。

#下面你这个自定义函数本质就是为了在两张图片间隔时间逐步减少到0的时候调用
    def gameStart(self):
        #设计两张图片的间隔时间
        self.speed=random.randint(150,250)
        #创建计数器对象
        self.timer=QTimer()
        #将间隔时间赋给计时器,但是当间隔时间小于0的时候,他就会停止运行
        self.timer.setInterval(self.speed)
        #计时开始
        self.timer.start()
        #时间到了,就链接startTimer这个函数
        self.timer.timeout.connect(self.startTimer)

当该函数计时结束后,就会自动调用startTimer这个函数

下面的代码主要是为了调整图片的大小,就是当挑选到它时,它会放大。但是需要注意些细节,比如在第一个图标的时候,它的前一个图标也就是第15个图标,要变回原来的形状。

最后不要忘了记得把自定义的窗体初始化函数在类中调用。

#本质就是为了调整大小
    def startTimer(self):
#100为原来图片的大小,若索引为0,第15张图片就会变成原来大小,否则就是该索引的前一张变小。
        if self.index==0:
            self.btns[15].setIconSize(QSize(100,100))
        else:
            self.btns[self.index-1].setIconSize(QSize(100,100))
#选中的图片进行放大,130这个数值可以更改,这样图片会变得更大。
        self.btns[self.index].setIconSize(QSize(130,130))
        self.index+=1#索引+1才会使图片进行轮转,是计时器函数一直在不停运行,但是索引加1的话,到最后一张图片会报错。
        #超出索引,从下标0开始
        if self.index>=len(self.btns):
            self.index=0
        #设置器速度越来越快,然后越来越慢
        if self.direction:
            self.speed-=5#每次间隔时间都减5,间隔小于0,就会停止,这样会使转动的速度越来越快。
        else:
            self.speed+=5
#当两张图片间隔时间小于0时,会将时间间隔重新设置为0,然后会转变方向,逐渐变慢。
        if self.speed<=1:
            self.speed=1
            self.direction=False
        self.timer.setInterval(self.speed)  # 重置间隔时间(就是让上面判断加减时间起作用)
#当慢到一定程度的时候就会停止
        if self.speed>=270:
            self.direction=True
            self.timer.stop()
            self.message_lbl.setText(self.btns_message[self.index-1])

下面我将附上源码,仅供参考。

# -*- coding: utf-8 -*-
import random
import sys

# Form implementation generated from reading ui file 'mygame.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QTimer, QSize
from PyQt5.QtWidgets import QApplication, QMainWindow


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(796, 573)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("images/水果机.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Dialog.setWindowIcon(icon)
        self.p1_btn = QtWidgets.QPushButton(Dialog)
        self.p1_btn.setGeometry(QtCore.QRect(10, 10, 120, 120))
        self.p1_btn.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("images/p1.png"), 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.p2_btn = QtWidgets.QPushButton(Dialog)
        self.p2_btn.setGeometry(QtCore.QRect(140, 10, 120, 120))
        self.p2_btn.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("images/p2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p2_btn.setIcon(icon2)
        self.p2_btn.setIconSize(QtCore.QSize(100, 100))
        self.p2_btn.setFlat(True)
        self.p2_btn.setObjectName("p2_btn")
        self.p3_btn = QtWidgets.QPushButton(Dialog)
        self.p3_btn.setGeometry(QtCore.QRect(270, 10, 120, 120))
        self.p3_btn.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("images/p3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p3_btn.setIcon(icon3)
        self.p3_btn.setIconSize(QtCore.QSize(100, 100))
        self.p3_btn.setFlat(True)
        self.p3_btn.setObjectName("p3_btn")
        self.p4_btn = QtWidgets.QPushButton(Dialog)
        self.p4_btn.setGeometry(QtCore.QRect(400, 10, 120, 120))
        self.p4_btn.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("images/p4.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p4_btn.setIcon(icon4)
        self.p4_btn.setIconSize(QtCore.QSize(100, 100))
        self.p4_btn.setFlat(True)
        self.p4_btn.setObjectName("p4_btn")
        self.p5_btn = QtWidgets.QPushButton(Dialog)
        self.p5_btn.setGeometry(QtCore.QRect(530, 10, 120, 120))
        self.p5_btn.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("images/p5.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p5_btn.setIcon(icon5)
        self.p5_btn.setIconSize(QtCore.QSize(100, 100))
        self.p5_btn.setFlat(True)
        self.p5_btn.setObjectName("p5_btn")
        self.p6_btn = QtWidgets.QPushButton(Dialog)
        self.p6_btn.setGeometry(QtCore.QRect(660, 10, 120, 120))
        self.p6_btn.setText("")
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("images/p6.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p6_btn.setIcon(icon6)
        self.p6_btn.setIconSize(QtCore.QSize(100, 100))
        self.p6_btn.setFlat(True)
        self.p6_btn.setObjectName("p6_btn")
        self.p7_btn = QtWidgets.QPushButton(Dialog)
        self.p7_btn.setGeometry(QtCore.QRect(660, 140, 120, 120))
        self.p7_btn.setText("")
        icon7 = QtGui.QIcon()
        icon7.addPixmap(QtGui.QPixmap("images/p7.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p7_btn.setIcon(icon7)
        self.p7_btn.setIconSize(QtCore.QSize(100, 100))
        self.p7_btn.setFlat(True)
        self.p7_btn.setObjectName("p7_btn")
        self.p8_btn = QtWidgets.QPushButton(Dialog)
        self.p8_btn.setGeometry(QtCore.QRect(660, 270, 120, 120))
        self.p8_btn.setText("")
        icon8 = QtGui.QIcon()
        icon8.addPixmap(QtGui.QPixmap("images/p8.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p8_btn.setIcon(icon8)
        self.p8_btn.setIconSize(QtCore.QSize(100, 100))
        self.p8_btn.setFlat(True)
        self.p8_btn.setObjectName("p8_btn")
        self.p9_btn = QtWidgets.QPushButton(Dialog)
        self.p9_btn.setGeometry(QtCore.QRect(660, 400, 120, 120))
        self.p9_btn.setText("")
        icon9 = QtGui.QIcon()
        icon9.addPixmap(QtGui.QPixmap("images/p9.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p9_btn.setIcon(icon9)
        self.p9_btn.setIconSize(QtCore.QSize(100, 100))
        self.p9_btn.setFlat(True)
        self.p9_btn.setObjectName("p9_btn")
        self.p10_btn = QtWidgets.QPushButton(Dialog)
        self.p10_btn.setGeometry(QtCore.QRect(530, 400, 120, 120))
        self.p10_btn.setText("")
        icon10 = QtGui.QIcon()
        icon10.addPixmap(QtGui.QPixmap("images/p10.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p10_btn.setIcon(icon10)
        self.p10_btn.setIconSize(QtCore.QSize(100, 100))
        self.p10_btn.setFlat(True)
        self.p10_btn.setObjectName("p10_btn")
        self.p11_btn = QtWidgets.QPushButton(Dialog)
        self.p11_btn.setGeometry(QtCore.QRect(400, 400, 120, 120))
        self.p11_btn.setText("")
        icon11 = QtGui.QIcon()
        icon11.addPixmap(QtGui.QPixmap("images/p11.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p11_btn.setIcon(icon11)
        self.p11_btn.setIconSize(QtCore.QSize(100, 100))
        self.p11_btn.setFlat(True)
        self.p11_btn.setObjectName("p11_btn")
        self.p12_btn = QtWidgets.QPushButton(Dialog)
        self.p12_btn.setGeometry(QtCore.QRect(270, 400, 120, 120))
        self.p12_btn.setText("")
        icon12 = QtGui.QIcon()
        icon12.addPixmap(QtGui.QPixmap("images/p12.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p12_btn.setIcon(icon12)
        self.p12_btn.setIconSize(QtCore.QSize(100, 100))
        self.p12_btn.setFlat(True)
        self.p12_btn.setObjectName("p12_btn")
        self.p13_btn = QtWidgets.QPushButton(Dialog)
        self.p13_btn.setGeometry(QtCore.QRect(140, 400, 120, 120))
        self.p13_btn.setText("")
        icon13 = QtGui.QIcon()
        icon13.addPixmap(QtGui.QPixmap("images/p13.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p13_btn.setIcon(icon13)
        self.p13_btn.setIconSize(QtCore.QSize(100, 100))
        self.p13_btn.setFlat(True)
        self.p13_btn.setObjectName("p13_btn")
        self.p14_btn = QtWidgets.QPushButton(Dialog)
        self.p14_btn.setGeometry(QtCore.QRect(10, 400, 120, 120))
        self.p14_btn.setText("")
        icon14 = QtGui.QIcon()
        icon14.addPixmap(QtGui.QPixmap("images/p14.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p14_btn.setIcon(icon14)
        self.p14_btn.setIconSize(QtCore.QSize(100, 100))
        self.p14_btn.setFlat(True)
        self.p14_btn.setObjectName("p14_btn")
        self.p15_btn = QtWidgets.QPushButton(Dialog)
        self.p15_btn.setGeometry(QtCore.QRect(10, 270, 120, 120))
        self.p15_btn.setText("")
        icon15 = QtGui.QIcon()
        icon15.addPixmap(QtGui.QPixmap("images/p15.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p15_btn.setIcon(icon15)
        self.p15_btn.setIconSize(QtCore.QSize(100, 100))
        self.p15_btn.setFlat(True)
        self.p15_btn.setObjectName("p15_btn")
        self.p16_btn = QtWidgets.QPushButton(Dialog)
        self.p16_btn.setGeometry(QtCore.QRect(10, 140, 120, 120))
        self.p16_btn.setText("")
        icon16 = QtGui.QIcon()
        icon16.addPixmap(QtGui.QPixmap("images/p16.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.p16_btn.setIcon(icon16)
        self.p16_btn.setIconSize(QtCore.QSize(100, 100))
        self.p16_btn.setFlat(True)
        self.p16_btn.setObjectName("p16_btn")
        self.start_btn = QtWidgets.QPushButton(Dialog)
        self.start_btn.setGeometry(QtCore.QRect(350, 530, 111, 41))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.start_btn.setFont(font)
        self.start_btn.setObjectName("start_btn")
        self.message_lbl = QtWidgets.QLabel(Dialog)
        self.message_lbl.setGeometry(QtCore.QRect(210, 180, 371, 161))
        font = QtGui.QFont()
        font.setPointSize(18)
        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.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
        self.myInitWindow()

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "水果机"))
        self.start_btn.setText(_translate("Dialog", "开始"))
        self.message_lbl.setText(_translate("Dialog", "拼搏百天,我要吃?"))

#自定义窗体属性
    def myInitWindow(self):
        #保存按键,和信息到列表当中
        self.btns=[self.p1_btn,self.p2_btn,self.p3_btn,self.p4_btn,self.p5_btn,self.p6_btn,self.p7_btn,self.p8_btn,self.p9_btn,self.p10_btn,self.p11_btn,self.p12_btn,self.p13_btn,self.p14_btn,self.p15_btn,self.p16_btn]
        self.btns_message=["橙子:富含维生素C","蓝莓:抗氧化作用","西瓜:保持水分平衡","苹果:促进心血管健康","菠萝:抗炎作用","草莓:促进消化健康","葡萄:保护视力","猕猴桃:促进肌肤健康","水蜜桃:支持免疫系统","荔枝:提供丰富的营养","柠檬:提供抗菌作用","芒果:提供能量和提升心情","榴莲:增强免疫力","车厘子:改善睡眠质量","香蕉:维持心脏健康","梨:抗炎和抗氧化作用"]
        #随机循环
        self.index=random.randint(0,16)
        #方向为True,时间递减
        self.direction=True
        #将开始按钮连接到游戏开始自定义函数
        self.start_btn.clicked.connect(self.gameStart)
        #本质就是计时到一定时间后调用下一个函数
    def gameStart(self):
        #间隔时间(毫秒)
        self.speed=random.randint(150,250)
        #创建计数器对象
        self.timer=QTimer()
        #将间隔时间放入到计数器中,小于0的话,就会停止运行
        self.timer.setInterval(self.speed)
        #计时开始
        self.timer.start()
        #时间到了,就链接stratTimer这个函数
        self.timer.timeout.connect(self.startTimer)
    #本质就是为了调整大小
    def startTimer(self):
        if self.index==0:
            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#索引+1然后?是计时器函数一直在不停运行
        #超出索引,从下标0开始
        if self.index>=len(self.btns):
            self.index=0
        #设置器速度越来越快,然后越来越慢
        if self.direction:
            self.speed-=5#每次间隔时间都减5,间隔小于0,就会停止
        else:
            self.speed+=5
        if self.speed<=1:
            self.speed=1
            self.direction=False
        self.timer.setInterval(self.speed)  # 重置间隔时间(就是让上面判断加减时间起作用
        if self.speed>=270:
            self.direction=True
            self.timer.stop()
            self.message_lbl.setText(self.btns_message[self.index-1])

#程序入口
if __name__ == '__main__':
    #程序对象实例化
    app=QApplication(sys.argv)
    #创建主窗体
    MainWindow=QMainWindow()
    #创建自定义窗体
    ui=Ui_Dialog()
    #将自定义窗体设计为主窗体
    ui.setupUi(MainWindow)
    #规定其宽和高
    MainWindow.setFixedSize(MainWindow.width(),MainWindow.height())
    #显示主窗体
    MainWindow.show()
    sys.exit(app.exec_())

运行出来的界面大概是这样子的,点击按钮之后,就会不停轮转最后选哪个水果,中间的文字标签就会出现对应的注释了。

个人总结:

这个项目呢,没有上个项目难,但完全掌握也时需要一定时间的,比如新出现的计时器的知识,时间只要小于0就会停止,这个是新东西。大家在阅读的时候还是要保证思路清晰,接下来一遍一遍的练习之后,代码便会在脑中自动浮现。

希望各位读者可以多多复习,文章内容很长,但很高兴能与你在结尾处相见!

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值