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脚本批量下载DesktopNexus壁纸的教程
May 06 Python
python开发之文件操作用法实例
Nov 13 Python
使用Python生成随机密码的示例分享
Feb 18 Python
python字典DICT类型合并详解
Aug 17 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
python用pandas数据加载、存储与文件格式的实例
Dec 07 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
tensorflow2.0保存和恢复模型3种方法
Feb 03 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
python小程序之飘落的银杏
Apr 17 Python
关于Python OS模块常用文件/目录函数详解
Jul 01 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数组添加元素方法小结
2014/12/20 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
JavaScript事件列表解说
2006/12/22 Javascript
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
JS 实现Base64编码与解码实例详解
2016/11/07 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
vue的mixins属性详解
2018/03/14 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
python之yield表达式学习
2014/09/02 Python
在Python中使用第三方模块的教程
2015/04/27 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
Python深入06——python的内存管理详解
2016/12/07 Python
PyQt实现界面翻转切换效果
2018/04/20 Python
python远程连接MySQL数据库
2019/04/19 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
python实现批量转换图片为黑白
2020/06/16 Python
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
个人自我鉴定怎么写
2013/10/28 职场文书
安全隐患整改报告
2014/11/06 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
办公用品管理制度
2015/08/04 职场文书