当前位置:   article > 正文

【python】用PyQt5教你制作简单的水果抽奖机_python抽奖有ui画面的

python抽奖有ui画面的

目录

水果机模拟器的介绍

制作水果机的步骤

水果机的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

  1. import random
  2. import sys
  3. from msilib import Dialog
  4. import self as self
  5. from PyQt5 import QtCore, QtGui, QtWidgets
  6. from PyQt5.QtCore import QTimer, QSize
  7. from PyQt5.QtGui import QPalette, QPixmap, QBrush
  8. from PyQt5.QtWidgets import QApplication, QMainWindow
  9. def setInterval(self):
  10. """
  11. :param self:
  12. """
  13. pass
  14. class Ui_Dialog(object):
  15. def setupUi(self, Dialog):
  16. Dialog.setObjectName("Dialog")
  17. Dialog.resize(751, 536)
  18. icon = QtGui.QIcon()
  19. icon.addPixmap(QtGui.QPixmap("水果图片/西瓜果(watermelon fruit)-ico_爱给网_aigei_com.ico"), QtGui.QIcon.Normal,
  20. QtGui.QIcon.Off)
  21. Dialog.setWindowIcon(icon)
  22. self.p1_btn = QtWidgets.QPushButton(Dialog)
  23. self.p1_btn.setGeometry(QtCore.QRect(9, 14, 113, 109))
  24. self.p1_btn.setText("")
  25. icon1 = QtGui.QIcon()
  26. icon1.addPixmap(QtGui.QPixmap("水果图片/苹果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  27. self.p1_btn.setIcon(icon1)
  28. self.p1_btn.setIconSize(QtCore.QSize(100, 100))
  29. self.p1_btn.setFlat(True)
  30. self.p1_btn.setObjectName("p1_btn")
  31. self.p1_btn_2 = QtWidgets.QPushButton(Dialog)
  32. self.p1_btn_2.setGeometry(QtCore.QRect(132, 14, 113, 109))
  33. self.p1_btn_2.setText("")
  34. icon2 = QtGui.QIcon()
  35. icon2.addPixmap(QtGui.QPixmap("水果图片/橙子.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  36. self.p1_btn_2.setIcon(icon2)
  37. self.p1_btn_2.setIconSize(QtCore.QSize(100, 100))
  38. self.p1_btn_2.setFlat(True)
  39. self.p1_btn_2.setObjectName("p1_btn_2")
  40. self.p1_btn_3 = QtWidgets.QPushButton(Dialog)
  41. self.p1_btn_3.setGeometry(QtCore.QRect(255, 14, 113, 109))
  42. self.p1_btn_3.setText("")
  43. icon3 = QtGui.QIcon()
  44. icon3.addPixmap(QtGui.QPixmap("水果图片/蓝莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  45. self.p1_btn_3.setIcon(icon3)
  46. self.p1_btn_3.setIconSize(QtCore.QSize(100, 100))
  47. self.p1_btn_3.setFlat(True)
  48. self.p1_btn_3.setObjectName("p1_btn_3")
  49. self.p1_btn_4 = QtWidgets.QPushButton(Dialog)
  50. self.p1_btn_4.setGeometry(QtCore.QRect(378, 14, 113, 109))
  51. self.p1_btn_4.setText("")
  52. icon4 = QtGui.QIcon()
  53. icon4.addPixmap(QtGui.QPixmap("水果图片/荔枝.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  54. self.p1_btn_4.setIcon(icon4)
  55. self.p1_btn_4.setIconSize(QtCore.QSize(100, 100))
  56. self.p1_btn_4.setFlat(True)
  57. self.p1_btn_4.setObjectName("p1_btn_4")
  58. self.p1_btn_5 = QtWidgets.QPushButton(Dialog)
  59. self.p1_btn_5.setGeometry(QtCore.QRect(502, 14, 113, 109))
  60. self.p1_btn_5.setText("")
  61. icon5 = QtGui.QIcon()
  62. icon5.addPixmap(QtGui.QPixmap("水果图片/芒果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  63. self.p1_btn_5.setIcon(icon5)
  64. self.p1_btn_5.setIconSize(QtCore.QSize(100, 100))
  65. self.p1_btn_5.setFlat(True)
  66. self.p1_btn_5.setObjectName("p1_btn_5")
  67. self.p1_btn_6 = QtWidgets.QPushButton(Dialog)
  68. self.p1_btn_6.setGeometry(QtCore.QRect(625, 14, 113, 109))
  69. self.p1_btn_6.setText("")
  70. icon6 = QtGui.QIcon()
  71. icon6.addPixmap(QtGui.QPixmap("水果图片/猕猴桃.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  72. self.p1_btn_6.setIcon(icon6)
  73. self.p1_btn_6.setIconSize(QtCore.QSize(100, 100))
  74. self.p1_btn_6.setFlat(True)
  75. self.p1_btn_6.setObjectName("p1_btn_6")
  76. self.p1_btn_9 = QtWidgets.QPushButton(Dialog)
  77. self.p1_btn_9.setGeometry(QtCore.QRect(625, 134, 113, 109))
  78. self.p1_btn_9.setText("")
  79. icon7 = QtGui.QIcon()
  80. icon7.addPixmap(QtGui.QPixmap("水果图片/草莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  81. self.p1_btn_9.setIcon(icon7)
  82. self.p1_btn_9.setIconSize(QtCore.QSize(100, 100))
  83. self.p1_btn_9.setFlat(True)
  84. self.p1_btn_9.setObjectName("p1_btn_9")
  85. self.p1_btn_16 = QtWidgets.QPushButton(Dialog)
  86. self.p1_btn_16.setGeometry(QtCore.QRect(625, 254, 113, 109))
  87. self.p1_btn_16.setText("")
  88. icon8 = QtGui.QIcon()
  89. icon8.addPixmap(QtGui.QPixmap("水果图片/葡萄.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  90. self.p1_btn_16.setIcon(icon8)
  91. self.p1_btn_16.setIconSize(QtCore.QSize(100, 100))
  92. self.p1_btn_16.setFlat(True)
  93. self.p1_btn_16.setObjectName("p1_btn_16")
  94. self.p1_btn_15 = QtWidgets.QPushButton(Dialog)
  95. self.p1_btn_15.setGeometry(QtCore.QRect(625, 413, 113, 109))
  96. self.p1_btn_15.setText("")
  97. icon9 = QtGui.QIcon()
  98. icon9.addPixmap(QtGui.QPixmap("水果图片/樱桃.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  99. self.p1_btn_15.setIcon(icon9)
  100. self.p1_btn_15.setIconSize(QtCore.QSize(100, 100))
  101. self.p1_btn_15.setFlat(True)
  102. self.p1_btn_15.setObjectName("p1_btn_15")
  103. self.p1_btn_13 = QtWidgets.QPushButton(Dialog)
  104. self.p1_btn_13.setGeometry(QtCore.QRect(502, 413, 113, 109))
  105. self.p1_btn_13.setText("")
  106. icon10 = QtGui.QIcon()
  107. icon10.addPixmap(QtGui.QPixmap("水果图片/青柠.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  108. self.p1_btn_13.setIcon(icon10)
  109. self.p1_btn_13.setIconSize(QtCore.QSize(100, 100))
  110. self.p1_btn_13.setFlat(True)
  111. self.p1_btn_13.setObjectName("p1_btn_13")
  112. self.p1_btn_11 = QtWidgets.QPushButton(Dialog)
  113. self.p1_btn_11.setGeometry(QtCore.QRect(378, 413, 113, 109))
  114. self.p1_btn_11.setText("")
  115. icon11 = QtGui.QIcon()
  116. icon11.addPixmap(QtGui.QPixmap("水果图片/杨梅.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  117. self.p1_btn_11.setIcon(icon11)
  118. self.p1_btn_11.setIconSize(QtCore.QSize(100, 100))
  119. self.p1_btn_11.setFlat(True)
  120. self.p1_btn_11.setObjectName("p1_btn_11")
  121. self.p1_btn_12 = QtWidgets.QPushButton(Dialog)
  122. self.p1_btn_12.setGeometry(QtCore.QRect(255, 413, 113, 109))
  123. self.p1_btn_12.setText("")
  124. icon12 = QtGui.QIcon()
  125. icon12.addPixmap(QtGui.QPixmap("水果图片/香蕉.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  126. self.p1_btn_12.setIcon(icon12)
  127. self.p1_btn_12.setIconSize(QtCore.QSize(100, 100))
  128. self.p1_btn_12.setFlat(True)
  129. self.p1_btn_12.setObjectName("p1_btn_12")
  130. self.p1_btn_14 = QtWidgets.QPushButton(Dialog)
  131. self.p1_btn_14.setGeometry(QtCore.QRect(132, 413, 113, 109))
  132. self.p1_btn_14.setText("")
  133. icon13 = QtGui.QIcon()
  134. icon13.addPixmap(QtGui.QPixmap("水果图片/西瓜.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  135. self.p1_btn_14.setIcon(icon13)
  136. self.p1_btn_14.setIconSize(QtCore.QSize(100, 100))
  137. self.p1_btn_14.setFlat(True)
  138. self.p1_btn_14.setObjectName("p1_btn_14")
  139. self.p1_btn_10 = QtWidgets.QPushButton(Dialog)
  140. self.p1_btn_10.setGeometry(QtCore.QRect(9, 413, 113, 109))
  141. self.p1_btn_10.setText("")
  142. icon14= QtGui.QIcon()
  143. icon14.addPixmap(QtGui.QPixmap("水果图片/无花果.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  144. self.p1_btn_10.setIcon(icon14)
  145. self.p1_btn_10.setIconSize(QtCore.QSize(100, 100))
  146. self.p1_btn_10.setFlat(True)
  147. self.p1_btn_10.setObjectName("p1_btn_10")
  148. self.p1_btn_8 = QtWidgets.QPushButton(Dialog)
  149. self.p1_btn_8.setGeometry(QtCore.QRect(9, 254, 113, 109))
  150. self.p1_btn_8.setText("")
  151. icon15 = QtGui.QIcon()
  152. icon15.addPixmap(QtGui.QPixmap("水果图片/桃子.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  153. self.p1_btn_8.setIcon(icon15)
  154. self.p1_btn_8.setIconSize(QtCore.QSize(100, 100))
  155. self.p1_btn_8.setFlat(True)
  156. self.p1_btn_8.setObjectName("p1_btn_8")
  157. self.p1_btn_7 = QtWidgets.QPushButton(Dialog)
  158. self.p1_btn_7.setGeometry(QtCore.QRect(9, 134, 113, 109))
  159. self.p1_btn_7.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
  160. self.p1_btn_7.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
  161. self.p1_btn_7.setText("")
  162. icon16 = QtGui.QIcon()
  163. icon16.addPixmap(QtGui.QPixmap("水果图片/树莓.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  164. self.p1_btn_7.setIcon(icon16)
  165. self.p1_btn_7.setIconSize(QtCore.QSize(100, 100))
  166. self.p1_btn_7.setFlat(True)
  167. self.p1_btn_7.setObjectName("p1_btn_7")
  168. self.message_lbl = QtWidgets.QLabel(Dialog)
  169. self.message_lbl.setGeometry(QtCore.QRect(160, 190, 441, 81))
  170. font = QtGui.QFont()
  171. font.setPointSize(20)
  172. font.setBold(True)
  173. font.setWeight(75)
  174. self.message_lbl.setFont(font)
  175. self.message_lbl.setAlignment(QtCore.Qt.AlignCenter)
  176. self.message_lbl.setObjectName("message_lbl")
  177. self.pushButton = QtWidgets.QPushButton(Dialog)
  178. self.pushButton.setGeometry(QtCore.QRect(310, 310, 131, 61))
  179. self.pushButton.setMouseTracking(True)
  180. self.pushButton.setIconSize(QtCore.QSize(16, 16))
  181. self.pushButton.setObjectName("pushButton")
  182. self.pushButton.background_color: (1.0, 0.4, 1.0, 0.0)
  183. self.p1_btn.raise_()
  184. self.p1_btn_2.raise_()
  185. self.p1_btn_3.raise_()
  186. self.p1_btn_4.raise_()
  187. self.p1_btn_5.raise_()
  188. self.p1_btn_6.raise_()
  189. self.p1_btn_9.raise_()
  190. self.p1_btn_16.raise_()
  191. self.p1_btn_15.raise_()
  192. self.p1_btn_11.raise_()
  193. self.p1_btn_13.raise_()
  194. self.p1_btn_12.raise_()
  195. self.p1_btn_14.raise_()
  196. self.p1_btn_10.raise_()
  197. self.p1_btn_8.raise_()
  198. self.p1_btn_7.raise_()
  199. self.message_lbl.raise_()
  200. self.pushButton.raise_()
  201. self.retranslateUi(Dialog)
  202. QtCore.QMetaObject.connectSlotsByName(Dialog)
  203. def retranslateUi(self, Dialog):
  204. _translate = QtCore.QCoreApplication.translate
  205. Dialog.setWindowTitle(_translate("Dialog", "刘佳皓的水果机"))
  206. self.message_lbl.setText(_translate("Dialog", "敢不敢试一试你的手气!!!"))
  207. self.pushButton.setText(_translate("Dialog", "5元一次"))
  208. # 以上代码除一些驱动外,基本都是UI里面的代码。

 用代码对UI进行修饰

  1. self.myInitWindow()
  2. """这些代码是用来对UI的一些修改,根据自己的需要,
  3. 对其中一些代码的修改,可以得到自己想要的效果。"""
  4. # 设置窗体透明
  5. # Dialog.setWindowOpacity(0.9)
  6. # 设置窗体的背景色
  7. # Dialog.setStyleSheet("#Dialog{background-color:blue}")
  8. # 设置列表控件的背景色
  9. # self.Dialog.setStyleSheet("#Dialog{background-color:LavenderBlush}")
  10. # 设置窗体边框固定大小
  11. Dialog.setFixedSize(Dialog.width(), Dialog.height())
  12. # 设置窗体背景图片
  13. palette = QPalette()
  14. pix = QPixmap("水果图片/桌子.jpg")
  15. # # 自调背景图大小和窗体适应
  16. pix = pix.scaled(Dialog.width(), Dialog.height())
  17. palette.setBrush(QPalette.Background, QBrush(pix))
  18. Dialog.setPalette(palette)
  19. self.message_lbl.setStyleSheet("color: rgb(196, 222, 255);")
  20. self.pushButton.setStyleSheet("color: rgb(111, 321, 123);")

 窗体属性

  1. def myInitWindow(self):
  2. """
  3. """
  4. self.btns = [self.p1_btn, self.p1_btn_2, self.p1_btn_3, self.p1_btn_4,
  5. self.p1_btn_5, self.p1_btn_6, self.p1_btn_9, self.p1_btn_16, self.p1_btn_15,
  6. self.p1_btn_13, self.p1_btn_11, self.p1_btn_12, self.p1_btn_14, self.p1_btn_10,
  7. self.p1_btn_8, self.p1_btn_7]
  8. self.btns_message = ["一天一苹果,医生远离我。", "橙子减少胆结石的发病率。", "蓝莓有助于防止衰老和癌症。",
  9. "荔枝促进新陈代谢。", "芒果抗菌消炎。",
  10. "猕猴桃使皮肤变得光滑。", "草莓助于消化,能健睥和胃。", "葡萄地阻止肾结石的形成。",
  11. "樱桃明显抑制肝癌细胞增殖。", "青柠减少脂肪的沉积。。",
  12. "杨梅清热解暑,解酒,利尿消肿.", "香蕉预防或治疗高血压。", "西瓜止暑解渴,健胃消食。",
  13. "无花果提高睡眠质量。", "桃子利尿解暑、清热明目。", "树莓有助于保护心脏"]
  14. self.pushButton.clicked.connect(self.gameStart)
  15. self.index = random.randint(0, 16)
  16. self.direction = True
  17. # 认定Ture是递减

启动游戏 

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

 Qtime的timeout事件

  1. # 计时器间隔时间到达执行函数
  2. def startTimer(self):
  3. # 判断当前按钮列表索引是否为0
  4. if self.index == 0:
  5. # 如果为0,索引15的按钮图片重新设置为原始大小
  6. self.btns[15].setIconSize(QSize(100, 100))
  7. # 否则
  8. else:
  9. # 索引减一的按钮图片重新设置为原始大小
  10. self.btns[self.index - 1].setIconSize(QSize(100, 100))
  11. # 设置按钮列表当前索引所在按钮图片大小变大
  12. self.btns[self.index].setIconSize(QSize(130, 130))
  13. # 索引加一
  14. self.index += 1
  15. # 判断索引是否超出按钮列表最大索引
  16. if self.index >= len(self.btns):
  17. # 如果索引超出范围,索引重新从0开始
  18. self.index = 0
  19. # 判断计时器间隔时间值是减少还是增加
  20. if self.direction:
  21. # 如果是Ture,间隔每次减少5毫秒
  22. self.speed -= 15
  23. else:
  24. # 如果是False,间隔每次怎加5毫秒
  25. self.speed += 15
  26. # 判断计时器间隔时间是否小于1毫秒
  27. if self.speed <= 1:
  28. # 重新设置间隔时间
  29. self.speed = 1
  30. self.direction = False
  31. # 重新设置下一次计时器间隔时间
  32. self.timer.setInterval(self.speed)
  33. # 判断计时器间隔时间是否大于等于300毫秒
  34. if self.speed >= 300:
  35. # 重新设置变量direction的值为Ture,代表方向减少
  36. self.direction = True
  37. # 停止
  38. self.timer.stop()
  39. self.message_lbl.setText(self.btns_message[self.index - 1])

 窗体加载

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

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

总结 

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/780768
推荐阅读
相关标签
  

闽ICP备14008679号