Python+PyQt5实现灭霸响指功能


Posted in Python onMay 25, 2020

之前给大家分享过灭霸命令GitHub地址:https://github.com/hotvulcan/Thanos.sh,本文使用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, 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.3water.com/202005/yuanma/Python_PyQt5_miebaxzh_3water.rar

总结

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

Python 相关文章推荐
Python 列表(List)操作方法详解
Mar 11 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
python基础教程项目三之万能的XML
Apr 02 Python
python之从文件读取数据到list的实例讲解
Apr 19 Python
对pandas的行列名更改与数据选择详解
Nov 12 Python
PyQt5实现五子棋游戏(人机对弈)
Mar 24 Python
python3 下载网络图片代码实例
Aug 27 Python
python多线程同步之文件读写控制
Feb 25 Python
基于pandas中expand的作用详解
Dec 17 Python
从训练好的tensorflow模型中打印训练变量实例
Jan 20 Python
python实现简单坦克大战
Mar 27 Python
Python操作Excel的学习笔记
Feb 18 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 #Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 #Python
关于keras中keras.layers.merge的用法说明
May 23 #Python
使用keras2.0 将Merge层改为函数式
May 23 #Python
使用keras实现densenet和Xception的模型融合
May 23 #Python
在keras下实现多个模型的融合方式
May 23 #Python
Keras使用ImageNet上预训练的模型方式
May 23 #Python
You might like
php 获取全局变量的代码
2011/04/21 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
php简单获取目录列表的方法
2015/03/24 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
python人民币小写转大写辅助工具
2018/06/20 Python
手把手教你如何安装Pycharm(详细图文教程)
2018/11/28 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
python制作图片缩略图
2019/04/30 Python
pandas.cut具体使用总结
2019/06/24 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
2020/03/09 Python
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
介绍一下Ruby的多线程处理
2013/02/01 面试题
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
企业宣传方案
2014/03/04 职场文书
双语教学实施方案
2014/03/23 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
农村文化活动总结
2014/08/28 职场文书
党建工作整改措施
2014/10/28 职场文书
工会经费申请报告
2015/05/15 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
springboot实现string转json json里面带数组
2022/06/16 Java/Android