用Pyqt5自制桌面小工具

作者: lottu | 来源:发表于2019-04-26 11:28 被阅读673次
    python.jpg

    背景

    工作中经常遇到一个小环节--测试数据验证
    例如检测游戏是否接入支付接口。

    1. 运营人员从CP那边拿到游戏交给测试人员测试。
    2. 测试人员测试充值;并发邮件出来需要数据验证。
    3. 技术进行数据查询并验证;并邮件告知是否接入支付接口。
      若验证失败;上面的环节又要重复一遍。若在 第一步 能进行数据验证工作。这样就可以释放后面两个步骤;也避免验证失败需要回退;这样提高工作效率,节约时间。但运营人员非技术;所以需要类似小工具进行操作验证。
      image.png

    如何自制小工具

    我选择的是Pyqt5;Pyqt5是Qt移植到Python上的。提供了一个良好的窗口控件集合。
    安装环境操作:https://www.jianshu.com/p/20f8da41af91

    # 可使用douban镜像快速下载pyqt5
    pip install -i https://pypi.douban.com/simple pyqt5
    pip install -i https://pypi.douban.com/simple pyqt5-tools
    

    学习资料:http://www.xdbcb8.com/pyqt5/
    百度云下载 PyQt5快速开发与实战.pdf提取码:qay5

    1. 采用QT Designer设计界面

    image.png

    2. 编译ui文件

    设计好了界面;保存文件为lottu06.ui;需要编译成py文件。在 cmd 命令行执行

    pyuic5 -o E:\pyqt\lottu06.py E:\pyqt\lottu06.ui
    

    3. 编写信号与槽

    本例填写appid,qn。再点击按钮;弹出对话框提示。
    在生成的lottu06.py文件进行添加

    #对按钮 添加信号
    self.pushButton.clicked.connect(Form.lottu)
    # 编写槽方法
       def lottu(self):
            try:
                username =UserName
                passname = PWD
                ip = IP
                datebasename = Oracle服务名
                ipport = 端口
                connStatus = 'OK'
                conStr = username+'/'+passname+'@'+ip+':'+ipport+'/'+datebasename
                conn = oracle.connect(conStr)
                appid = self.lineEdit.text()
                qn = self.lineEdit_2.text()
                if self.radioButton.isChecked():
                    sql = "select count(1) from tbl_android_pay_log where appid =" + appid + " and qn = '" + qn + "' and pay_time >= trunc(sysdate)"
                else:
                    sql = "select count(1) from tbl_ios_pay_log where appid =" + appid + " and qn = '" + qn + "' and pay_time >= trunc(sysdate)"
                cursor = conn.cursor()
                cursor.execute(sql)
                result = cursor.fetchone()
                if result[0] == 0:
                    QMessageBox.information(self, '信息提示框', 'NO, 未接支付接口')
                else:
                    QMessageBox.information(self, '信息提示框', 'OK, 成功接支付')
                cursor.close()
                conn.close()
            except oracle.Error as e:
                connStatus = e
                print(connStatus)
    

    本例连的数据库是Oracle;还需要安装 cx_Oracle;
    在使用界面与逻辑分离;编写lottu.py文件

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow
    from lottu06 import Ui_Form
    
    
    class MyMainWindow(QMainWindow, Ui_Form):
        def __init__(self, parent=None):
            super(MyMainWindow, self).__init__(parent)
            self.setupUi(self)
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        myWin = MyMainWindow()
        myWin.show()
        sys.exit(app.exec_())
    

    4. 执行结果

    image.png

    5. 使用pyinstaller打包成exe

    # 【拓展】在命令行执行
    pyinstaller -F -w -i E:\pyqt\images\cartoon1.ico E:\pyqt\lottu.py
    

    即可以生成桌面小工具exe文件。
    填写对应的appid,qn即可。


    image.png

    加载dll资源

    由于python中连接oracle数据库使用第三方库文件cx_Oracle;上面生成的小工具exe;在未安装Oracle客户端的电脑执行会报错"DPI-1407"的错误码。你若把文件 oci.dll,oraociei11.dll拷贝到对应的目录下也是可以执行成功。为你机智点赞。当然可以使用pyinstaller打包附带DLL、图标和压缩EXE方法

    1. 生成spec配置文件
    cd /d e:\pyqt
    pyinstaller -F E:\pyqt\lottu.py
    
    1. 配置spec配置文件
      在datas行修改
    datas=[('oci.dll','.'),('oraociei11.dll','.')]
    
    1. 利用upx命令压缩exe
      upx下载
      其中E:\tool\upx391w为upx下载解压目录
    pyinstaller -F E:\pyqt\lottu.spec --upx E:\tool\upx391w
    
    1. 生成exe工具
      这个时候测试的工具带有的dll
    pyinstaller -F -w E:\pyqt\lottu.spec
    

    相关文章

      网友评论

        本文标题:用Pyqt5自制桌面小工具

        本文链接:https://www.haomeiwen.com/subject/xqgxnqtx.html