以下为授权转载的一盎司科技公众号文章
Python除了编写脚本非常方便,制作界面小工具也很快捷,这里使用PySide6制作一个自动生成C++类的小工具。后续考虑使用之前开源的PySideFrameless项目来改造,提升美观度。
示例代码地址:
GitHub地址:https://github.com/iounce/python-cpp-demo
Gitee地址:https://gitee.com/iounce_admin/python-cpp-demo
环境
-
Windows操作系统:Windows10(21H2,19044.1766)
-
C++开发环境:Visual Studio 2022社区版
-
Python:3.10.4
编写界面
PySide6制作界面,可以使用界面设计工具来设计布局,然后编译成Python文件来使用。同时,也可以纯代码的方式来实现布局,这样就无需依赖其他外部文件。两者各有优劣,可根据需要选择,此处选择手动编码实现。
首先定义自定义类MainWindow,继承自QtWidgets.QMainWindow,然后添加一个空组件设置为主界面的中心控件,接着在中心控件设计布局。
界面布局
布局主要由QGridLayout,QHBoxLayout来实现,这里将主界面水平分割为三块,第一块self.layout_class为C++类和文件名所在行;第二块self.layout_func为类的成员函数相关内容(返回值,函数名,入参等)所在的行;第三块self.layout_result为结果列表所在的行。
初始化控件
接着,对每一块水平布局进一步细化,增加标签,输入框等控件,完善界面细节。其中,init_class()实现类名,文件名等控件的初始化;init_func()实现函数定义相关控件的初始化;init_result()则实现结果列表控件等的初始化;init_tab_order()则设置控件的tab顺序,方便通过tab键来切换控件。
增加响应函数
在点击界面控件的时候,需要绑定对应的响应函数,这样才会响应点击的操作,其中on_add_func()是点击添加函数按钮的响应,on_sub_func()是减少函数按钮的响应,on_gen_cpp()是生成C++相关文件按钮的响应。
增加消息过滤
消息过滤主要是为了当输入完C++类名后自动生成C++文件名,譬如输入类名MyClass,则自动生成MyClass.cpp。
效果展示
说明:
-
项目文件包含main.spec文件,可以通过安装PyInstaller将Python文件打包为exe文件;
-
项目文件包含setup.iss文件,可修改相关路径,实现将exe文件及其依赖文件打包为安装文件,然后可以在其他机器安装。