1. 程式人生 > 程式設計 >Python+PyQt5實現滅霸響指功能

Python+PyQt5實現滅霸響指功能

之前在GitHub有趣分享:Thanos(滅霸命令)中分享了有趣的“滅霸命令”,本博文使用Python+PyQt5實現滅霸響指,實現過程較簡單,上效果圖~

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,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)
 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)
 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,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,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,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 滅霸響指內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!