Python+PyQt5实现灭霸响指功能

 更新时间:2020年5月25日 08:05  点击:2275

之前在GitHub有趣分享:Thanos(灭霸命令)中分享了有趣的“灭霸命令”,本博文使用Python+PyQt5实现灭霸响指,实现过程较简单,上效果图~

GUI实现代码如下:

# -*- coding: utf-8 -*-
 
from PyQt5 import QtCore, QtGui, QtWidgets
 
class Ui_MainWindow(object):
 def setupUi(self, MainWindow):
 MainWindow.setObjectName("MainWindow")
 MainWindow.resize(766, 760)
 self.centralwidget = QtWidgets.QWidget(MainWindow)
 self.centralwidget.setObjectName("centralwidget")
 self.btn_start = QtWidgets.QPushButton(self.centralwidget)
 self.btn_start.setGeometry(QtCore.QRect(60, 10, 111, 101))
 self.btn_start.setStyleSheet("background-color: rgba(255, 255, 255, 0);")
 self.btn_start.setText("")
 self.btn_start.setObjectName("btn_start")
 self.widget = QtWidgets.QWidget(self.centralwidget)
 self.widget.setGeometry(QtCore.QRect(60, 120, 631, 441))
 self.widget.setObjectName("widget")
 self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
 self.verticalLayout.setContentsMargins(0, 0, 0, 0)
 self.verticalLayout.setObjectName("verticalLayout")
 self.horizontalLayout = QtWidgets.QHBoxLayout()
 self.horizontalLayout.setObjectName("horizontalLayout")
 self.label_1 = QtWidgets.QLabel(self.widget)
 self.label_1.setAlignment(QtCore.Qt.AlignCenter)
 self.label_1.setObjectName("label_1")
 self.horizontalLayout.addWidget(self.label_1)
 self.label_2 = QtWidgets.QLabel(self.widget)
 self.label_2.setAlignment(QtCore.Qt.AlignCenter)
 self.label_2.setObjectName("label_2")
 self.horizontalLayout.addWidget(self.label_2)
 self.label_3 = QtWidgets.QLabel(self.widget)
 self.label_3.setAlignment(QtCore.Qt.AlignCenter)
 self.label_3.setObjectName("label_3")
 self.horizontalLayout.addWidget(self.label_3)
 self.label_4 = QtWidgets.QLabel(self.widget)
 self.label_4.setAlignment(QtCore.Qt.AlignCenter)
 self.label_4.setObjectName("label_4")
 self.horizontalLayout.addWidget(self.label_4)
 self.verticalLayout.addLayout(self.horizontalLayout)
 self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
 self.horizontalLayout_2.setObjectName("horizontalLayout_2")
 self.label_5 = QtWidgets.QLabel(self.widget)
 self.label_5.setAlignment(QtCore.Qt.AlignCenter)
 self.label_5.setObjectName("label_5")
 self.horizontalLayout_2.addWidget(self.label_5)
 self.label_6 = QtWidgets.QLabel(self.widget)
 self.label_6.setAlignment(QtCore.Qt.AlignCenter)
 self.label_6.setObjectName("label_6")
 self.horizontalLayout_2.addWidget(self.label_6)
 self.label_7 = QtWidgets.QLabel(self.widget)
 self.label_7.setAlignment(QtCore.Qt.AlignCenter)
 self.label_7.setObjectName("label_7")
 self.horizontalLayout_2.addWidget(self.label_7)
 self.label_8 = QtWidgets.QLabel(self.widget)
 self.label_8.setAlignment(QtCore.Qt.AlignCenter)
 self.label_8.setObjectName("label_8")
 self.horizontalLayout_2.addWidget(self.label_8)
 self.verticalLayout.addLayout(self.horizontalLayout_2)
 self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
 self.horizontalLayout_3.setObjectName("horizontalLayout_3")
 self.label_9 = QtWidgets.QLabel(self.widget)
 self.label_9.setAlignment(QtCore.Qt.AlignCenter)
 self.label_9.setObjectName("label_9")
 self.horizontalLayout_3.addWidget(self.label_9)
 self.label_10 = QtWidgets.QLabel(self.widget)
 self.label_10.setAlignment(QtCore.Qt.AlignCenter)
 self.label_10.setObjectName("label_10")
 self.horizontalLayout_3.addWidget(self.label_10)
 self.label_11 = QtWidgets.QLabel(self.widget)
 self.label_11.setAlignment(QtCore.Qt.AlignCenter)
 self.label_11.setObjectName("label_11")
 self.horizontalLayout_3.addWidget(self.label_11)
 self.label_12 = QtWidgets.QLabel(self.widget)
 self.label_12.setAlignment(QtCore.Qt.AlignCenter)
 self.label_12.setObjectName("label_12")
 self.horizontalLayout_3.addWidget(self.label_12)
 self.verticalLayout.addLayout(self.horizontalLayout_3)
 self.widget1 = QtWidgets.QWidget(self.centralwidget)
 self.widget1.setGeometry(QtCore.QRect(220, 570, 321, 151))
 self.widget1.setObjectName("widget1")
 self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.widget1)
 self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
 self.horizontalLayout_4.setObjectName("horizontalLayout_4")
 self.label_13 = QtWidgets.QLabel(self.widget1)
 self.label_13.setAlignment(QtCore.Qt.AlignCenter)
 self.label_13.setObjectName("label_13")
 self.horizontalLayout_4.addWidget(self.label_13)
 self.label_14 = QtWidgets.QLabel(self.widget1)
 self.label_14.setAlignment(QtCore.Qt.AlignCenter)
 self.label_14.setObjectName("label_14")
 self.horizontalLayout_4.addWidget(self.label_14)
 MainWindow.setCentralWidget(self.centralwidget)
 self.menubar = QtWidgets.QMenuBar(MainWindow)
 self.menubar.setGeometry(QtCore.QRect(0, 0, 766, 26))
 self.menubar.setObjectName("menubar")
 MainWindow.setMenuBar(self.menubar)
 
 self.retranslateUi(MainWindow)
 QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
 def retranslateUi(self, MainWindow):
 _translate = QtCore.QCoreApplication.translate
 MainWindow.setWindowTitle(_translate("MainWindow", "FPO"))
 self.label_1.setText(_translate("MainWindow", "1"))
 self.label_2.setText(_translate("MainWindow", "1"))
 self.label_3.setText(_translate("MainWindow", "1"))
 self.label_4.setText(_translate("MainWindow", "1"))
 self.label_5.setText(_translate("MainWindow", "1"))
 self.label_6.setText(_translate("MainWindow", "1"))
 self.label_7.setText(_translate("MainWindow", "1"))
 self.label_8.setText(_translate("MainWindow", "1"))
 self.label_9.setText(_translate("MainWindow", "1"))
 self.label_10.setText(_translate("MainWindow", "1"))
 self.label_11.setText(_translate("MainWindow", "1"))
 self.label_12.setText(_translate("MainWindow", "1"))
 self.label_13.setText(_translate("MainWindow", "1"))
 self.label_14.setText(_translate("MainWindow", "1"))

项目启动代码如下:

# -*- coding: utf-8 -*-
import sys
import time
import threading
from PyQt5.QtGui import QPixmap, QImage
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox, QGraphicsOpacityEffect
from GUI import Ui_MainWindow
import cv2
import numpy as np
def cv_imread(file_path):
 cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), -1)
 return cv_img
class SnapFinger(QMainWindow, Ui_MainWindow):
 num = 0
 flag_btn_start = True
 flag_hero_revive = False
 choose_list = []
 def __init__(self):
 super(SnapFinger, self).__init__()
 self.setupUi(self)
 self.setFixedSize(self.width(), self.height())
 self.label_all = [self.label_1, self.label_2, self.label_3,
    self.label_4, self.label_5, self.label_6,
    self.label_7, self.label_8, self.label_9,
    self.label_10, self.label_11, self.label_12,
    self.label_13, self.label_14]
 self.deal_with_label_all()
 file_path_1 = 'resources/BlackPanther.jpg'
 file_path_2 = 'resources/BlackWidow.jpg'
 file_path_3 = 'resources/CaptainAmerica.jpg'
 file_path_4 = 'resources/Clint.jpg'
 file_path_5 = 'resources/DoctorStranger.jpg'
 file_path_6 = 'resources/Drax.jpg'
 file_path_7 = 'resources/Groot.jpg'
 file_path_8 = 'resources/Hulk.jpg'
 file_path_9 = 'resources/Mantis.jpg'
 file_path_10 = 'resources/Nebula.jpg'
 file_path_11 = 'resources/SpiderMan.jpg'
 file_path_12 = 'resources/Thor.jpg'
 file_path_13 = 'resources/Vision.jpg'
 file_path_14 = 'resources/Winter.jpg'
 self.file_path_label_all = [file_path_1, file_path_2, file_path_3, file_path_4,
     file_path_5, file_path_6, file_path_7, file_path_8,
     file_path_9, file_path_10, file_path_11, file_path_12,
     file_path_13, file_path_14]
 self.load_image_to_label()
 btn_img_file_1 = "QPushButton{border-image: url(resources/thanos_1.png)}"
 btn_img_file_2 = "QPushButton{border-image: url(resources/thanos_2.png)}"
 btn_img_file_3 = "QPushButton{border-image: url(resources/thanos_3.png)}"
 btn_img_file_4 = "QPushButton{border-image: url(resources/thanos_4.png)}"
 self.file_path_btn_all = [btn_img_file_1, btn_img_file_2, btn_img_file_3, btn_img_file_4]
 self.load_image_to_btn()
 self.btn_start.clicked.connect(self.slot_btn_start)
 def deal_with_label_all(self):
 for i in range(14):
  self.label_all[i].setScaledContents(True)
 def deal_with_image_for_cv2(self, image):
 # 提取图像的尺寸和通道, 用于将opencv下的image转换成Qimage
 height, width, channel = image.shape
 bytesPerLine = 3 * width
 self.qImg = QImage(image.data, width, height, bytesPerLine,
    QImage.Format_RGB888).rgbSwapped()
 # 将Qimage显示出来
 px = QPixmap()
 px_1 = px.fromImage(self.qImg)
 return px_1
 def load_image_to_btn(self):
 self.btn_start.setStyleSheet(self.file_path_btn_all[0])
 def load_image_to_label(self):
 for i in range(14):
  self.img = cv_imread(self.file_path_label_all[i])
  if self.img.size == 1:
  return
  px_1 = self.deal_with_image_for_cv2(self.img)
  self.label_all[i].setPixmap(px_1)
 def select_image_random(self):
 z = 0
 temp_list = []
 while z < 7:
  tt = np.random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
  if tt not in temp_list:
  temp_list.append(int(tt))
  z += 1
  else:
  pass
 for i in temp_list:
  self.choose_list.append(self.label_all[i])
 def appear_fun(self, cn):
 n = 0
 op = QGraphicsOpacityEffect()
 for i in range(100):
  op.setOpacity(n)
  cn.setGraphicsEffect(op)
  n += 0.01
  time.sleep(0.01)
 def image_appear(self):
 self.btn_start.setStyleSheet(self.file_path_btn_all[3])
 for cn in self.choose_list:
  self.appear_fun(cn)
  time.sleep(0.05)
 self.choose_list = []
 self.btn_start.setStyleSheet(self.file_path_btn_all[0])
 self.flag_btn_start = True
 def disappear_fun(self, cn):
 n = 1
 op = QGraphicsOpacityEffect()
 for i in range(100):
  op.setOpacity(n)
  cn.setGraphicsEffect(op)
  n -= 0.01
  time.sleep(0.01)
 def image_disappear(self):
 self.select_image_random()
 for cn in self.choose_list:
  self.disappear_fun(cn)
  time.sleep(0.05)
 self.btn_start.setStyleSheet(self.file_path_btn_all[0])
 self.flag_hero_revive = True
 def thread_1(self):
 self.btn_start.setStyleSheet(self.file_path_btn_all[1])
 time.sleep(1)
 self.btn_start.setStyleSheet(self.file_path_btn_all[2])
 time.sleep(0.5)
 t_2 = threading.Thread(target=self.image_disappear)
 t_2.start()
 def slot_btn_start(self):
 if self.flag_btn_start == True:
  self.flag_btn_start = False
  t_1 = threading.Thread(target=self.thread_1)
  t_1.start()
 elif self.flag_hero_revive == True:
  self.flag_hero_revive = False
  t_3 = threading.Thread(target=self.image_appear)
  t_3.start()
 else:
  pass
 def closeEvent(self, event):
 reply = QMessageBox.question(self, 'Exit', 'Are you sure to exit?', QMessageBox.Yes | QMessageBox.Cancel)
 if reply == QMessageBox.Yes:
  event.accept()
 else:
  event.ignore()
def ui_main():
 app = QApplication(sys.argv)
 w = SnapFinger()
 w.show()
 sys.exit(app.exec_())
if __name__ == '__main__':
 ui_main()

项目文件及代码参见:http://xiazai.jb51.net/202005/yuanma/Python_PyQt5_miebaxzh_jb51.rar

总结

到此这篇关于Python+PyQt5实现灭霸响指的文章就介绍到这了,更多相关python pyqt5 灭霸响指内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • python opencv 画外接矩形框的完整代码

    这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • 最炫Python烟花代码全解析

    2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
  • python中numpy.empty()函数实例讲解

    在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
  • python-for x in range的用法(注意要点、细节)

    这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • python实现b站直播自动发送弹幕功能

    这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
  • python Matplotlib基础--如何添加文本和标注

    这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • python 计算方位角实例(根据两点的坐标计算)

    今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
  • python实现双色球随机选号

    这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
  • python中使用np.delete()的实例方法

    在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
  • 使用Python的pencolor函数实现渐变色功能

    这篇文章主要介绍了使用Python的pencolor函数实现渐变色功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-09
  • python自动化办公操作PPT的实现

    这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
  • Python getsizeof()和getsize()区分详解

    这篇文章主要介绍了Python getsizeof()和getsize()区分详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-20
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • 解决python 两个时间戳相减出现结果错误的问题

    这篇文章主要介绍了解决python 两个时间戳相减出现结果错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-12
  • Python绘制的爱心树与表白代码(完整代码)

    这篇文章主要介绍了Python绘制的爱心树与表白代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-06