首页/文章/ 详情

Abaqus GUI二次开发,揭秘控件的隐藏功能

1年前浏览6747

一个优秀的Abaqus插件不但要有内核程序,还要有与之匹配的图形用户界面。通常,我们会使用Abaqus RSG制作插件对话框。RSG很易于使用,不过正是过于容易,各个控件的一些功能往往是被限制了,在RSG中无法开启。

 

其实,Abaqus提供了Abaqus GUI Toolkit,也就是通常所说的Abaqus GUI二次开发。这些隐藏功能可以通过二次开发打开或调整,以实现我们不同的需求。

 

Abaqus GUI 二次开发与Abaqus内核二次开发一样,使用的都是Python语言。本篇文章列举6Abaqus的控件,以说明如何通过代码实现它们更多的功能。

 

下图是一个不含内核程序的对话框,RSG制作而成。它比较简单,包含标签页标签项、分组框、标签、图片、文本框和文件选择对话框等6控件

image.png 

将该插件保存为Standard plug-in格式,即可获得两个脚本。

image.png 

以上两个文件,以_plugin结尾的是注册脚本,以DB结尾的是对话框脚本。用代码编辑器打开fangzhenxiuDB.py,便可对对话框脚本进行编辑。以下通过修改代码的方式,对该对话框中的6个控件进行修改和扩展。

 

1、标签页和标签项控件

标签页FXTabBook是布局的一种,在它的基础上可以创建一组标签项,正如上图中的3个标签项,这些标签项可以自由切换,每个标签页可以容纳很多控件。

在脚本中,标签页的构造函数如下图:

image.png 

其中,参数p是父控件,tgt是消息目标,sel是消息ID,这两个参数是一对搭档,通常成对出现。参数opts是选项,默认值是TABBOOK_NORMAL,表示标签项位于该控件的上方。除此之外,还有几个可用的选项,如表1所示。

1 FXTabBook的opts参数值

参数opts

描述

TABBOOK_NORMAL

标签项位于上方(默认值)

TABBOOK_TOPTABS

标签项位于上方

TABBOOK_BOTTOMTABS

标签项位于下方

TABBOOK_SIDEWAYS

标签项位于左侧

TABBOOK_LEFTTABS

标签项位于左侧

TABBOOK_RIGHTTABS

标签项位于右侧

例如,将opts改设为TABBOOK_LEFTTABSTABBOOK_BOTTOMTABS后,对话框的样式如下面两个图所示。

     

image.png     image.png


以上是对标签页控件FXTabBook的位置做更改。不但如此,还可以对标签项FXTabItem做修改,比如在Tab A的前面添加小图标。在脚本中,默认的标签项构造函数为下图,参数ic即为图标,此处为None

image.png 

附件中提供了一个像素为18x18的小图标,我们首先用afxCreateIcon()创建一个图标对象,再把该图标赋值为参数ic,修改后的语句如下图。

image.png 

这样,标签页中会出现一个足球的小图标。

image.png 

 

2、分组框控件

分组框FXGroupBox是一种带有灰色边框的容器。对话框中通常用于将几个可以共同实现某一功能的控件进行分组,将这些控件放在同一个分组框内,不仅可以方便地进行管理,还能够让同一分组框内的多个单选按钮自动设为一组,只能同时选中其中的一个。这种方式不会受到放在外部或另一个分组框内的单选按钮的影响。

脚本中,分组框的构造函数如下图。

image.png 

参数opts默认为FRAME_GROOVE,表示分组框以灰色线条包裹,我们还可以添加为表2中的三个值。

2 FXGroupBoxopts参数值

参数opts

描述

GROUPBOX_TITLE_LEFT

标题位于左上方(默认值)

GROUPBOX_TITLE_CENTER

标题位于方中上方

GROUPBOX_TITLE_RIGHT

标题位于右上方

例如,将opts设为FRAME_GROOVE|GROUPBOX_TITLE_CENTER后,分组框这三个字会至于中间。

image.png 

 image.png 

如果没有FRAME_GROOVE,灰色线条将会消失。

 

3、标签

标签控件FXLabel通常用于在对话框中显示一段文本或图片,用于信息提示等场景。如本对话框中的“你好,仿真秀”以及仿真秀logo都是由FXLabel生成的。

比如,一行“你好,仿真秀”,是由以下构造函数创建的。

image.png 

文本标签可以有换行和提示的功能。如果想换行,在文本中添加\n”,例如:

image.png 

image.png 

还可以把鼠标停留在标签文字上显示提示信息,可以在文字中添加\t”,例如:

image.png 

image.png 

此外,对话框中默认字体其实可以更改为其他字体,修改方式如下图。

image.png

再打开对话框,标签文字的字体已经更改为以下格式。

image.png 

以上语句用FXFont()创建了一个字体对象,其构造函数中参数wt表示字体粗细;sl表示字体倾斜;encencoding,表示字体编码;setwset width,定义字体的宽度;hhints,表示提示。这些参数的设置较多,具体请参考Abaqus官方文档Abaqus GUI Toolkit Reference Guide中的FXFont函数。

创建完毕后,用标签的setFont()方法,将字体对象用于当前文字,即可将更改字体。

需要注意,并不是所有控件都能设置字体,只有控件对象具有实例方法setFont()才可以更改字体。

 

4、图片

图片也是用标签控件FXLabel创建,此处创建图片的构造方法为:

image.png 

此处由于没有文字,所以参数text设为空,如果添加文字,那么文字会自动出现在图片的右侧,例如:

image.png 

呈现的效果如下图

image.png 

通过设置FXLabel的参数opts(此处otps采用默认值,没有显示),可以调整文本和图片的位置关系,具体参数值见表3

3 FXLabel的opts参数值

参数opts

描述

TEXT_OVER_ICON

文本置于图片上方,两者重叠

TEXT_AFTER_ICON

文本位于图片右侧(默认)

TEXT_BEFORE_ICON

文本位于图片左侧

TEXT_ABOVE_ICON

文本位于图片上方

TEXT_BELOW_ICON

文本位于图片下方

例如把opts设为TEXT_BEFORE_ICON,得到的效果如下图

image.png 

image.png 

 

5、文本框

文本框控件AFXTextField是很常用的一种控件,它是由标签和单行输入框组成的。脚本中的构造方法为:

image.png 

其中,第二个参数ncols表示输入框可完全容纳数字的位数它决定了输入框的宽度,脚本中设为20第三个参数labelText文本标签,表现为文本框左侧的字符串。与标签控件一样,它也可以用\n换行,以及\t设置光标停留的提示信息。

参数tgtsel是上面提到过,此处tgt设为form.keyword01Kw,它存在于注册脚本中,它是一种字符串类型的关键字,如下图:

image.png 

tgt为字符串类型关键字时,参数sel需设为0

AFXTextField()也有选项参数opts用来指定输入框的数据类型和其他作用,常见的类型详见4

4 AFXTextFieldopts参数值

参数opts

描述

AFXTEXTFIELD_STRING

字符串

AFXTEXTFIELD_INTEGER

整型

AFXTEXTFIELD_FLOAT

浮点型

AFXTEXTFIELD_COMPLEX

复数

AFXTEXTFIELD_CHECKBUTTON

前面有复选按钮

AFXTEXTFIELD_RADIOBUTTON

前面有单选按钮

AFXTEXTFIELD_VERTICAL

标签和输入框分两行

AFXTEXTFIELD_READONLY

输入框只读

例如,参数opts使用AFXTEXTFIELD_CHECKBUTTON时,文本框的前面会有一个复选框按钮,不勾选时无法输入,选中时才可使用,如下图所示。

image.png 

image.png 

image.png 

再比如,参数opts使用AFXTEXTFIELD_READONLY,输入框会被隐藏,文本内容成为不可编辑的标签,如图所示。

image.png 

image.png 

 

6、文件选择对话框

文件选择对话框控件也十分常用,用于打开或保存文件。这个控件实际是由文本框控件按钮控件通过水平框架布局组成的。

image.png 

点击按钮,会弹出一个对话框

image.png 

脚本中的文件选择对话框控件代码如下图所示:

image.png 

文件选择对话框控件实现机制比较复杂,除了对话框中的文本框和按钮,它还依靠下图中的类代码。

image.png 

不过,我们无需去探究它的实现过程,只需要在它的基础上探索被隐藏的功能。

比如,第104-106行是该控件的构造函数AFXFileSelectorDialog(),其中第106行的AFXSELECTFILE_ANY其实是参数mode的值(默认代码中省略了“mode=”的字样),它表示文件的选择方式。默认情况下,我们只能单选文件,其实通过修改mode的参数值,还可以改为多选文件或选择文件夹,mode的参数值的设置方式如表5所示。

5 AFXFileSelectorDialog的mode参数值

参数enc

描述

AFXSELECTFILE_ANY

文件单选,用于保存时文件可不存在

AFXSELECTFILE_EXISTING

文件单选,通常用于打开文件

AFXSELECTFILE_MULTIPLE

文件多选

AFXSELECTFILE_DIRECTORY

选择文件夹

此外,默认的文件过滤器中是没有限制的,当文件较多时找文件会比较麻烦,我们可以自定义要选择打开的文件类型。

image.png 

将上面的代码做以下修改,便可以定制我们想要的文件类型,比如只显示.cae.odb.inp等格式

image.png 

image.png 

默认情况下,当选择.odb文件时,后面的只读复选框处于可以使用的状态,而其他类型的文件则不可用。

image.png 

image.png 

如果想要设置选中.cae格式时也让复选框可用,可以修改上述第107的代码为:

image.png 

这样,只读选项也适用于.cae文件了

image.png 

 

以上列举了6个常用控件,它们都由RSG制作出来的,然而RSG并没有完全发挥出它们的全部功能,这些功能需要通过Abaqus GUI二次开发才能实现。除了这6个控件,Abaqus中其他的几乎所有控件都有被隐藏的功能,等待着我们去发掘。

在我的这套《基于Python语言Abaqus插件程序GUI二次开发技术训练营31讲(初中高篇)》课程中,详细讲解了Abaqus提供的绝大多数控件的二次开发方法,从代码的角度对它们进行剖析,揭秘它们更多的功能。此外,还课程还列举了7个高级实例,从更高层次灵活运用Abaqus GUI,使我们的Abaqus插件更加高级和完善。

附件

免费fangzhenxiu.zip
二次开发通用Abaqus
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-10-18
最近编辑:1年前
陈开伟
硕士 Abaqus和HW二次开发
获赞 55粉丝 88文章 7课程 5
点赞
收藏
作者推荐
未登录
1条评论
兜李有糖
签名征集中
1年前
学到了
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈