新手指引制作过程

新手指引的存在能让用户更直接的了解应用的使用步骤,在此以工资单旗舰版应用举例说明。

一、图片素材准备

应用的制作者需要梳理用户可能存疑的各个节点,并对其备注说明
首先运行过程中前期人为准备要提前告知,然后就是每一个输入参数的意义需要指明,再对于比较难理解的参数做进一步说明
如:
1. 提示会关闭 excel 或 wps
新手指引制作过程
2. 对每个参数说明
新手指引制作过程
3. 进一步说明
新手指引制作过程

二、代码调用

这里我们采用 pyqt5 这个第三方库来做图片的显示动作
代码如下:

import sys
import os
if hasattr(sys, 'frozen'):
    os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication,  QLabel, QMenu, QAction, QDialog, QMessageBox
from PyQt5.QtGui import QCursor
from PyQt5.QtCore import QPoint, Qt
import win32api
import win32con


# 新手指引
class NewcomerWidget(QDialog):
    def __init__(self):
        super().__init__()
        self.desktop = QApplication.desktop()
        # 获取显示器分辨率大小
        self.screenRect = self.desktop.screenGeometry()
        self.height = self.screenRect.height()
        self.width = self.screenRect.width()

        k = 1080/1920


        self.pic_path = os.path.dirname(os.path.realpath(sys.argv[0]))
        # print(self.pic_path)
        QMessageBox.information(self,"操作说明", "→或↓:下一步;↑或←:上一步;Esc:退出")
        self.setWindowTitle('iS-Search新手指引')
		# 显示的图标
        self.setWindowIcon(QtGui.QIcon("{}\\qiqi.gif".format(self.pic_path)))
        # self.setStyleSheet("background-color: rgb(26, 25, 25)")
        self.label = QLabel(self)
        # 图片素材的格式(png)及存放的位置(当前目录下的pics目录下)
        self.path_model = "{}\\pics\\{}.png"
        self.page = 1

        # print("================")
        # print("{}\\qiqi.gif".format(self.pic_path))
        # print("================")
        # print(self.path_model.format(self.pic_path, self.page))
        # print("================")

        # 调用QtGui.QPixmap方法,打开一个图片,存放在变量png中
        png = QtGui.QPixmap(self.path_model.format(self.pic_path, self.page))
        png = png.scaled(self.width,self.height)
        self.label.setPixmap(png)
        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested[QPoint].connect(self.myListWidget)

    def myListWidget(self):
        popMenu = QMenu()
        popMenu.addAction(QAction("上一张", self))
        popMenu.addAction(QAction("下一张", self))
        popMenu.addAction(QAction("退出", self))
        popMenu.triggered[QAction].connect(self.processtrigger)
        popMenu.exec_(QCursor.pos())

    # 右键按钮事件
    def processtrigger(self, q: QAction):
        # 输出QMenu对象被点击
        print(type(q))
        if q.text() == "上一张":
            self.back()
        elif q.text() == "下一张":
            self.down()
        else:
            self.close()

    # 下一张函数
    def down(self):
	    #共有19张图片(可根据自己的情况修改)
        if self.page >= 19:
            QMessageBox.information(self, "新手指引", "恭喜您完成新手指引")
            self.close()
        else:
            self.page += 1
            png = QtGui.QPixmap(self.path_model.format(self.pic_path, self.page))
            png = png.scaled(self.width, self.height)
            self.label.setPixmap(png)

    # 上一张函数
    def back(self):
        if self.page <= 1:
            QMessageBox.information(self, "新手指引", "已经是第一张啦,点击鼠标或键盘→|↓开始学习之旅吧")
            pass
        else:
            self.page -= 1
            png = QtGui.QPixmap(self.path_model.format(self.pic_path, self.page))
            png = png.scaled(self.width, self.height)
            self.label.setPixmap(png)

    def mousePressEvent(self, a0: QtGui.QMouseEvent):
        """
        左键点击
        :param a0:
        :return:
        """
        if a0.button() == Qt.LeftButton:
            self.down()

    def keyPressEvent(self, a0: QtGui.QKeyEvent):
        """
        键盘点击
        :param a0:
        :return:
        """
        # print(a0.key())
        if a0.key() == Qt.Key_Right or a0.key() == Qt.Key_Down:  # 右/下方向键
            self.down()
        elif a0.key() == Qt.Key_Left or a0.key() == Qt.Key_Up:  # 左/上方向键
            self.back()
        elif a0.key() == Qt.Key_Escape:
            self.close()
        else:
            a0.ignore()  # 其它忽略


if __name__ == '__main__':
    xszy = QApplication(sys.argv)
    window = NewcomerWidget()
    window.showFullScreen()
    sys.exit(xszy.exec_())

(结合指引的情况做修改)

三、代码结合应用使用

由于代码调用需要很多依赖的环境,因此这里采用 pyinstaller 的第三方库来将代码及环境打包成 exe。
打包语句如下

pyinstaller --path 电脑pyqt5的bin路径 --distpath 打包完成的exe存放路径 -D 需要打包的py代码文件
#如 pyinstaller --path C:\Users\admin\AppData\Local\Programs\Python\Python37\Lib\site-packages\PyQt5\Qt\bin --distpath C:\users\admin\Desktop\one\ -D C:\Users\admin\Documents\RPA\Project\pyqttest\codes\MainWindow.py

打包完成会在目标文件夹下生成 build 和 dist 两个文件夹,把 dist 下的 mainwindow 文件夹直接拷贝到应用的 codes 目录下,然后在应用中去打开这个 mainwindow 下的 exe 就可以了
在实际测试过程中会发现 exe 调起后就会执行后续组件,但我们实际需要等 exe 执行完成后再执行后续操作,所以要加上一个判断

os.popen('tasklist /FI "IMAGENAME eq MainWindow.exe"').read().count('MainWindow.exe')!=0

只要这个 exe 还存活,那么我们就等待,否则就可以执行后续操作 ~
好了,以上就是新手指引制作过程咯