不用重启Abaqus,手把手教你快速调试插件程序GUI

做过Abaqus二次开发的人都知道,Plug-ins菜单下的RSG对话框生成器,能很方便地生成插件程序对话框。对话框制作好之后,如保存为standard plug-in格式,则能自动转为Abaqus Gui toolkit脚本。虽然不能再用RSG对话框生成器进行编辑,但这种代码才是二次开发的语言,我们可以修改成更高级的对话框GUI。
而在对插件程序GUI做二次开发时,每当代码有更改,想要查看修改后的界面,必须要重启Abaqus,随着调试次数的增多,以及版本提升造成的打开缓慢,一次次打开Abaqus会显得不胜其烦,不知不觉会产生焦虑感。
我们改完脚本后,有没有什么方法,不用重新打开Abaqus,也能立刻显示对话框更改后的界面呢?
当然是有的。
其实帮助文档中,已经提供了一个方法。
打开帮助文档(版本6.14)中的 Abaqus GUI Toolkit User's Guide

点击 2.4 Running the prototype application

帮助中提示我们可以用二次开发的方法,即使不用重启Abaqus ,也能立刻看到效果。首先去”SIMULIA Learning Community“去下载一个附件。

下载需要注册账号,我已经下载好了,贴在下方,大家可以下载:
附件解压缩后,是6个脚本:

帮助中并没有阐述下一步该怎么做,我来说明一下接下来该如何设置。
先来解释一下这6个脚本的作用:
1、appIcons.py,打开后是大大的F和D字母,它能作为xpm格式,通过FXXPMIcon()构造方法创建图标
2、prototypeApp.py,启动脚本,它能创建并打开Abaqus应用程序。这个脚本的代码格式是固定的。
3、prototypeMainWindow.py,它是主窗口脚本,负责Abaqus自带工具集和自定义工具集的注册,以及自带模块和自定义的注册。工具集和模块中都分别包括了菜单、工具条、工具箱和树。这个脚本中,除了注册了常见的工具集和模块,还单独注册一个自定义的工具集:PrototypeToolsetGui,并把这个工具集放置在菜单和工具箱中。
4、prototypeToolsetGui.py,自定义的工具集。这个脚本能够新建图标按钮F和D,把这两个图标通过映射的方式,与自定义的插件程序做关联。
5、testDB.py,对话框脚本,我们通过RSG对话框生成器做出来的插件对话框,用standard-in格式保存后,能自动生成这个脚本。
6、testForm.py,Form模式脚本,作用是用来收集从对话框中输入的信息。这个脚本能调用对话框脚本。它也能通过RSG对话框生成器自动生成,只不过生成的名称是test_plugin.py。这里之所以要改名为testForm.py,是因为有两种模式,一种是Form模式,还有一种是Procedure模式,在做二次开发时,为了便于区分,把自动生成的_plugin改为了Form。除了改名之外,还必须删除自动生成的脚本中最后几行注册代码。
这6个脚本有两个作用:
一是能将Plug-ins菜单中的某个插件程序,转为左侧工具箱中的F和D图标按钮。(为什么要转为两个图标,下文讲解)
二是以往我们通过脚本修改插件程序后,必须重启Abaqus,才能看到改后的效果。而现在不用重启Abaqus主窗口,只要重新打开对话框,就能立刻看到改后的界面,等待时的焦虑感瞬间扫光。
这几个脚本毕竟只是个模板,怎么用于我们自己的插件程序呢?
我已经在社区下载脚本的基础上,做好另一套脚本,可以直接打开Abaqus,保留了F和D图标按钮,并也能实现即时查看更改后的对话框功能。大家可以在下方附件免费下载。
下载后解压缩,打开文件夹。

双击”startup.bat“,能打开Abaqus/CAE主窗口。
在主窗口的左侧,工具箱中有很醒目的F和D,F表示Form,D表示Dialogbox。

点击D,弹出一个自定义的插件(我做的很简单的插件,仅做演示用),点击OK可生成一个梁。

我们来做个演示,查看即时更改的功能:
用脚本编译器打开beamCreateDB.py,把对话框脚本做一些更改。为了不出现语法错误,建议只改 ' ' 中的字符串。这里比如:把34行的 'Dimension' 改为 '尺寸:' ,改后保存。
把对话框关闭后,点击“D”,可以发现对话框立刻做了更改。

同样,打开beamCreateForm.py,这个脚本是收集在对话框输入的数据。比如将第28行的40改为150,保存。
先点击”F”,再点击”D”,会发现length的默认值从之前的40,改为了150。
这里的”F”对应的是Form模式脚本,它负责创建关键字,并启动对话框脚本,自己也带有默认值。

如果对控件代码有所了解,可以直接添加控件语句:

这套脚本是通用的,大家可以把自己的插件程序用于这套脚本上,按照以下步骤更改:
Step 1、在RSG中把插件对话框保存为standard plug-in格式,一般是3个脚本文件+图片。假设内核脚本名称是abc.py,另外两个脚本就是abcDB.py和abc_plugin.py。
Step 2、把这3个脚本文件和图片,全部复制到My Abaqus文件夹下。
Step 3、把abc_plugin.py,改名为abcForm.py
Step 4、打开刚改完名的abcForm.py脚本,做如下三处修改:
1)把定义的类名改为abcForm(一般在第10行),可参考beamCreateForm.py第15行,注意第一个字母大写,如下图

2)找到实例方法getFirstDialog(),在import abcDB语句后面增加一行:reload(abcDB)。具体可参考beamCreateForm.py脚本的第40行,如下图

3)删除(或注释)最后的几行注册语句,如下图。其余不变,保存。

Step 5、打开myToolsetGui.py脚本,做如下修改:
1)把第8行改为:import abcForm

2)第24行改为:self.form = abcForm.AbcForm(self) ,注意后面的AbcForm是类名,”A“是大写的

3)第38行,改为:reload(abcForm)
4)第39行,改为:self.form = abcForm.AbcForm(self) ,与第24行一样

5)第45行,改为:return 'import abc'

更改完毕。
大家试一试,是不是可以点击D按钮打开插件呢?还可以试试更改脚本,体验实时更新对话框吧。
把插件程序做成按钮图标,用到了 Abaqus主窗口GUI的二次开发 和 Abaqus插件程序GUI二次开发 的一些内容,前者在我的课程《Abaqus主窗口GUI的二次开发》中有全套讲解。
关于Abaqus主窗口GUI的二次开发的介绍,也可以看帖子《除了内核程序,Abaqus还能这样做二次开发》
回到主题,不用重启Abaqus就能即时打开更改后的对话框,是如何实现的呢?其实不难理解,大家一定观察到了,在myToolsetGui.py和beamCreateForm.py这两个脚本中有用了reload()方法。
在myToolsetGui.py中,在第38行增加了reload(testForm)。它的作用是重新加载testForm模块,这个模块已经与F字母按钮做了映射。当我们修改脚本后,再次点击F字母时,就已经重新加载了testForm模块,打开的是新的模式脚本。
同样,testForm.py中,第40行增加了reload(testDB)。它能重新加载testDB模块,这个模块是对话框脚本,已经与D字母做了映射。当我们修改对话框脚本后,再次点击D字母,脚本已经重新被加载,打开的是新的对话框。也就实现了不用重启Abaqus,也能实时看到更改后的界面。
小结一下:我们并不能直接修改Plug-ins菜单下的插件程序,而是绕了一个弯,通过自定义Abaqus主窗口的方式,把Plug-ins菜单下的插件程序与两个图标按钮做关联,并做适当修改,同时注册到工具箱中,就能在修改后实时查看插件程序的界面了。需要修改两个脚本,一是 _plugins脚本,二是myToolsetGui脚本,分别都要添加reload()方法,通过重新加载Form脚本和对话框脚本的方式,来实现即时查看更改的目的。
做这两个按钮的好处,就是方便对插件对话框的GUI做更改。
为什么要对对话框的GUI做更改呢?
RSG对话框生成器中自带的控件,确实可以做出简单的对话框,但也就只能做简单的对话框了。因为几乎每个RSG提供的控件中的功能接口都很少,大量的功能接口被隐藏了(是真的!),还有一些控件用RSG是做不出来的。无论是控件的隐藏功能,还是做不出来的控件,想要使用它们,都必须以脚本的形式开发出来。
而在开发过程中,需要一次次的调试,如果每次调式都伴随着重启Abaqus,那是一件很头疼的事。所以如果有不用重启就能打开调式后的对话框的方法,使用起来则很痛快。
推出我的第二套课程:《Abaqus插件程序GUI的二次开发 初、中级篇》
课程一共21讲,从脚本的角度,全面讲解了RSG自带的22种控件,以及没包含的7种控件,共计29种控件,此外,还讲解了注册脚本中的8种类型关键字。课程以脚本的方式,不只是讲解如何创建控件,更多的是挖掘控件被隐藏的功能,从而做出更丰富、更实用的插件对话框。
课程第一讲,也有设置F和D两个图标按钮的演示,欢迎观看。
Abaqus GUI二次开发三部曲:

工程师必备
- 项目客服
- 培训客服
- 平台客服
TOP
