Abaqus图形界面程序(GUI)开发过程中会用到各种各样的 控件 (Widget),例如对话框、文本框、按钮、单选框、复选框、下拉框、表格等等。控件是GUI应用程序的最基本组成元素,用户可以使用各类控件从图形界面程序中收集参数、显示结果以及发送指令等。
主要有以下两种:
使用RSG对话框构造器创建:


使用这种方法创建界面较为简单,但是包含的控件较少,仅有上图所示的控件栏(上图写错了,不是空间栏)列出来的这些。
针对更加复杂的G UI界面 ,需要采用第二种方法,即采用编辑源代码的方式来搞GUI。使用该方法创建的控件种类丰富,但是不能像RSG对话框那样直观。
Abaqus GUI工具包是通过目标/消息(target/message)机制实现GUI对象间的交互,即控件之间相互传递消息,以及接受其他控件发来的消息。
消息由两部分构成,分别为消息类型和消息ID。消息类型指某个动作,例如“点击某个按钮”、“松开某个按钮”等,消息ID指的是消息的发送者。
Abaqus GUI工具包中的大部分控件都有指定目标和消息ID的变量,即使某种控件没有指定目标和ID的变量,也可以通过setTarget 和 setSelector方法来设定其目标以及ID。例如:
FXButton(parent, 'Label',tgt-self, sel=selfID_D) #创建一个按钮groupBox =FXGroupBox(parent) #创建一个控件盒,自身无法设置目标和IDgroupBox.setTarget(self) #设置其目标groupBox.setSelector(self.ID_2) #设置其消息ID .控件可以发送多种类型的消息,最常用的两种消息类型是SEL_COMMAND和SEL_UPDATE。

消息通过映射传递给消息处理方,用户可以指定其接收到某消息类型以及消息ID时触发某个函数(例如上图的onCmdA、onCmdB等)。
消息映射一般通过FXMAPFUNCO函数来定义,FXMAPFUNC()函数有4个变量,分别是self、消息类型( message type )、消息ID ( message ID)以及调用的方法名( method name )。其中方法名必须由类名来限定,例如 className.methodName,className为类名,methodName为方法名。
当接收到的消息类型和消息ID与某一个FXMAPFUNC()函数中定义的消息类型和消息ID 匹配时,相应的方法就会被调用。另外,如果需要在消息映射中定义一段范围内的ID,可以采用FXMAPFUNCS()函数,该函数的变量有5个: self、消息类型( message type)、起始消息 ID ( start message ID)、结束消息ID ( end message ID)以及方法名( method name )。另外,用户可以使用SELTYPE和 SELID 函数从消息处理方获取消息的类型和ID。
下面的示例代码体现了消息映射、消息ID、消息处理的关系:
class MyClass(BaseClass): [ID_1,ID_2] = range(BaseClass.ID_LAST,BaseClass.ID_LAST+2) #分配ID # range() 函数返回的是一个可迭代对象(类型是对象) def __init__(self): BaseClass.__init__(self) FXMAPFUNC(self,SEL_COMMAND,self.ID_1,MyClass.onCmdPrintMsg) FXMAPFUNC(self,SEL_COMMAND,self.ID_2,MyClass.onCmdPrintMsg) #消息映射,指定消息ID及执行方法 FXButton(self,'Button1',None,self.ID_1) FXButton(self,'Button2',None,self.ID_2) #创建按钮控件,指定其目标及ID #定义执行方法 def onCmdPrintMsg(self,sender,sel,ptr): #使用SELID函数获取消息ID if SELID(sel) == self.ID_1: print "Button1 was pressed" elif SELID(sel) == self.ID_2: print "Button2 was pressed" return 1在上述实例中,定义了两个按钮“Button 1”和“Button 2”,其目标均是类本体self,消息ID分别是self.ID_1和 self.ID_2。同时程序中定义了两个消息映射,分别对应 self.ID_1和 self.ID_2,两个消息映射所对应的执行方法均是onCmdPrintMsg()。当按钮“Button 1”被触发时,其消息ID被传递给其目标 self(MyClass),经消息映射判断,消息ID与第一组消息映射匹配,因此该组映射中指向的执行方法 MyClass.onCmdPrintMsg()被触发。
上面的示例代码应该是书中作者摘取的一段源码,可能看着不太懂,没有关系,大致了解工作机制即可。后面会对控件的使用做详细的介绍。

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删