许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  Python编写带界面的HFSS小工具:打包成exe文件教程

Python编写带界面的HFSS小工具:打包成exe文件教程

阅读数 5
点赞 0
article_banner

1、外部控制HFSS有什么好处?

作为一名天线工程师,HFSS是是工作中使用频率非常高的仿真软件,其性能强大,且简单易用,并且支持用脚本进行二次开发。

然而,在日常工作中,仍然有些繁琐的操作,靠软件本身难以满足,比如画多个波束叠加的方向图,也就是一张图里面叠加多条方向图曲线,需要不停地复制、粘贴、修改馈电相位。。。既费时又容易出错。虽然可以编写脚本来实现自动化操作,然而工程一换,条件一变,又得重新编写,让人非常烦恼

又如,希望通过算法来优化天线图形,需要控制HFSS画图——导出结果——优化图形,依靠HFSS自身脚本则难以满足。

于是,我就构思写一个能从外部控制HFSS的小程序,具有简单的界面,并能通过手动输入参数,应对各种不同的工程文件,而且还要能形成exe文件,方便分享。

在网上查了一下,还真没找到实现类似功能的介绍,好在自己有一定的编程基础,于是花了两天时间,自己动手造了一个。。。

在这个过程中,我总结主要有三个难点(坑):

  • 如何用Python 从外部控制HFSS;
  • 如何编写一个简单的GUI(图形界面);
  • 如何在离线环境中,用pyinstaller打包出一个体积10M左右,可单独执行的exe;

Ok,介绍完毕,Let's go!

2、如何用Python控制HFSS

这部分内容相对简单,我以前写过一个系列文章,其中就用到了这个技术。

Python可采用win32com模块来控制HFSS,如果没有win32com模块,则应调出命令提示符,输入pip install pywin32,安装该模块。

成功安装后,新建HFSS_controller.py,输入代码如下:

from win32com import client
  
class Handler:
    def __init__(self):
        self.oAnsoftApp = client.Dispatch('AnsoftHfss.HfssScriptInterface')
        self.oDesktop = self.oAnsoftApp.GetAppDesktop()
        self.oProject = self.oDesktop.GetActiveProject()
        self.oDesign = self.oProject.GetActiveDesign()
        self.prj_name = self.oProject.GetName()
        self.des_name = self.oDesign.GetName()

接着打开HFSS——新建工程,然后运行以下代码(实例化Handler),可见已能成功获取当前打开的工程(Project)和设计(Design)的名称。



if __name__ == '__main__':
    h = Handler()
    print('Prj: ', h.prj_name)
    print('Des: ', h.des_name)

>>> Prj:  Project1
>>> Des:  HFSSDesign1

同时注意到,在HFSS同一个窗口中选取其他Project和Design时,再次运行程序,输出结果也会发生相应变化,说明Python可有效控制HFSS。

注意:如果运行代码时没有打开HFSS,程序会自动打开HFSS,并创建一个新的工程,此时,如果电脑打开HFSS比较慢,会出现“假死”的情况。

3、如何用Tk写一个简单的GUI

Python的GUI实现途径很多,常用的有Tkinter、PyQt、Kivy等,选择Tkinter一是因为Python自带,无需额外安装,二是该例子很简单,Tkinter性能足亦,三是后续打包相对方便。

然而,选择Tkinter(简称Tk)的最主要缺点是:界面比较丑 。。。下面是其基本功能的实现代码。

from tkinter import *
from win32com import client

# HFSS控制器,代码见前,略
class Handler:
    def __init__(self):
	...

# 回调函数:对应“连接”按钮
def connect():
    global h
    h = Handler()
    prj_name.set(h.prj_name)
    des_name.set(h.des_name)

# GUI主界面设置
main = Tk()
main.geometry('300x200')
main.title('HFSS控制器')

# 1、控制按钮设置
connect_btn = Button(main, text='连接', command=connect)
connect_btn.grid(row=0, column=0)

# 2、显示Project信息
Label(main, text='工程名: ').grid(row=1, column=0)
prj_name = StringVar()
Label(main, textvariable=prj_name).grid(row=1, column=1)

# 3、显示Design信息
Label(main, text='设计名: ').grid(row=2, column=0)
des_name = StringVar()
Label(main, textvariable=des_name).grid(row=2, column=1)

# 运行(Loop)
main.mainloop()

运行以后,可以得到如下界面:



点击连接按钮,可以在界面中获取HFSS信息(同样注意,HFSS应是打开状态)。



当然,该段代码只是实现了最最基本的功能,此处可以尽情发挥脑洞,并结合HFSS的代码帮助.pdf(下图位置打开),开发控制HFSS的各种功能。



比如,加入了如下一段方法后,可以实现控制HFSS画矩形的功能。

class Handler:
    def __init__(self):
        ...  # 省略,详细见前

    # 新增方法:画矩形
    def draw_rec(self, x, y, z, name, axis='Z'):
        self.oEditor = self.oDesign.SetActiveEditor("3D Modeler")
        self.oEditor.CreateRectangle(
            ...	 # 代码省略,见pdf中CreateRectangle
              )

# 回调函数:画矩形,对应“画矩形”按钮
def draw_a_rectangle():
    h.draw_rec(100, 50, 0, 'a')

# 画矩形
rec_btn = Button(main, text='画一个矩形', 
                 command=draw_a_rectangle)
rec_btn.grid(row=3, column=0)

然后即可实现在程序中控制HFSS画一个矩形。





3、如何用pyinstaller打包成exe

如果你想将写好的程序发给其他人使用,就需要将py文件打包,例如在Windows电脑上运行,则需要打包成exe文件。

这个时候,将遇到Python的一个大坑 !网上教程一般会推荐采用pyinstaller打包,然后折腾半天后,你会发现打包的exe体积接近200Mb,而且打开速度巨慢无比!确实让人沮丧,这还如何分享??

然而我没有放弃,经过反复研究后,我发现核心原因是不能在集成环境(比如Anaconda )中的python.exe作为解释器来打包py,否则会载入太多无用的包,正确的操作步骤如下:

A、在官网下载纯净的python并安装,新建一个文件夹,拷贝py文件,然后在Pycharm 中:File——Settings——Project: XX(XX为你的工程名)——Project Interpreter,在下拉菜单中选择Show All,点击+号,然后选择纯净的python.exe,Pycharm会创建一个新的虚拟环境



B、安装必要的模块:pywin32和pyinstaller,有两种安装方式:一是在刚才的界面中点击+号安装,二是在Pycharm集成的console中通过pip来安装,如下图(注意命令行前有venv标识,代表这是虚拟环境,这个时候安装的包不会影响虚拟环境外的Python)



注意:如果和我一样在一个不能联网的工作环境(不要问我为什么 ),则只能手动下载.whl或者.tar.gz文件,然后通过pip进行安装。

C、在命令行中输入

pyinstaller -F -w HFSS_controller.py

顺利的话则开始打包程序,完成后在当前目录下的dist文件夹出现可执行文件如下:



可见打包出来的exe只有10Mb左右,且运行顺利,NICE!

4、总结

本文介绍了采用Python控制HFSS的思路,并通过Tk编写了一个简易的界面,然后通过Pyinstaller打包成exe,完成了一个可直接执行、带界面的HFSS控制程序。大家可以按照这个思路,构建属于自己的HFSS自动化小工具,并且分享给同事。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空