关键字: PyQt、Python、调试工具、Pycharm
随着组内业务的扩大,经常会有需要给外部提供建议的调试工具的相关制作需求。由于我们岗位目前技术栈均为嵌入式C++开发,对于图形界面开发的能力和知识存在相对不足的情况。针对这个问题,找到另一种方式可以简化调试工具的开发流程。
Python的简洁与库众多的优势,决定了Python实现一些简单的业务只需要很少量的代码即可完成功能。同样的功能,代码行数越少意味着出错的几率越少,调试的过程越简单,开发者只用关心业务核心逻辑即可完成开发过程。根据目前开发过的一些简单工具而言(代码审核人员排布工具,电警视频车检器过车工具,批量升级工具等),简单工具的代码量均在100-200行以内。
由于上述特点,决定了Python是最为合适制作简单调试工具的开发语言。100-200行代码,能够实现界面,后台逻辑,并直接提供windows7/10/XP各种版本的一键运行绿色程序,不用考虑系统环境,兼容性好。
环境部署清单:
安装两个软件 |
安装三个依赖包 |
配置两个插件 |
PyCharm |
pip3 install PyQt5 |
Qt Designer |
Python3.X |
pip3 install PyQt5-tools |
PyUIC |
|
pip3 install pyinstaller |
|
其中两个软件直接在网上下载最新版本即可,PyCharm有社区版本,Python3则是开源免费的。
安装好Python后,在CMD中输入pip3既可以安装3个依赖包。
配置插件是在PyCharm的软件中配置好Qt Designer和PyUIC的两个插件,以供后续进行界面绘制和界面自动转换python代码的功能。
PyCharm > File > Settings
Qt Designer
Working directory: $FileDir$
图2-1 Qt Designer插件配置样例
PyCharm > File > Settings
PyUIC
Arguments: $FileName$ -o $FileNameWithoutExtension$.py
Working directory: $FileDir$
图2-2 PyUIC插件配置样例
配置好插件后,可以开始正式的编程工作,我们需要制作界面,Qt Designer则可以负责完成制作工作,对于界面的制作,这里Qt Desinger和普通版本的Qt使用方式完全一样,有Qt基础的同学则可以直接复用。这里简单介绍一下拖拽试图形变成界面。
在PyCharm中启动Qt Designer
图2-3 Qt Designer启动
图2-4 Qt Designer控件说明
图2-5 Qt Designer注册动作说明
图2-6 ui文件转py文件动作说明
这里就是刚刚我们注册的action1,等会需要具体实现 |
这里就是刚刚我们注册的action1,等会需要具体实现 |
图2-7 需要实现的后台逻辑说明
图2-8 最简单的工具框架类样例
到这里,实现了action1中的后台逻辑,我们的工具就做完了,这里只是输出一个我来过来展现,根据具体业务可以把这个我来过换成后台逻辑。
在主运行文件的目录下运行此命令,即可自动生成发布文件。
pyinstaller.exe -F -w -i icon.ico main.py
备注:此处icon.ico为图标文件,可以为生成的小程序设置你一个你觉得炫酷的图标。可以不写这个,没写的话,python默认会给一个自带的图标。
表2-1 pyinstall相关参数介绍
-h,--help |
查看该模块的帮助信息 |
-F,-onefile |
产生单个的可执行文件 |
-D,--onedir |
产生一个目录(包含多个文件)作为可执行程序 |
-a,--ascii |
不包含 Unicode 字符集支持 |
-d,--debug |
产生 debug 版本的可执行文件 |
-w,--windowed,--noconsolc |
指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
-c,--nowindowed,--console |
指定使用命令行窗口运行程序(仅对 Windows 有效) |
-o DIR,--out=DIR |
指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
-p DIR,--path=DIR |
设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 |
-n NAME,--name=NAME |
指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
暂无
附带样例main.py源码。(大概30行完成一个程序)
from untitled import *
from PyQt5.QtWidgets import *
import sys
class window(Ui_MainWindow, QMainWindow):
def __init__(self):
super(QMainWindow, self).__init__()
super(Ui_MainWindow, self).__init__()
self.setupUi(self)
def action1(self):
print("action1")
self.lineEdit.setText("我来过")
def main():
app = QApplication(sys.argv)
w = window()
w.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()