许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Abaqus GUI开发常用控件(一):控件创建方式及消息映射机制

Abaqus GUI开发常用控件(一):控件创建方式及消息映射机制

阅读数 15
点赞 0
article_banner

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

1. GUI图形界面的创建方式

主要有以下两种:

  • (1)使用RSG对话框构造器创建
  • (2)使用Abaqus GUI工具包创建

使用RSG对话框构造器创建:

使用这种方法创建界面较为简单,但是包含的控件较少,仅有上图所示的控件栏(上图写错了,不是空间栏)列出来的这些。

针对更加复杂的G UI界面 ,需要采用第二种方法,即采用编辑源代码的方式来搞GUI。使用该方法创建的控件种类丰富,但是不能像RSG对话框那样直观。

2. 目标和消息

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_COMMANDSEL_UPDATE

  • SEL_COMMAND类型的消息一般表示某个控件被触发,例如,用户按下了按钮。
  • SEL_UPDATE类型的消息一般是在某一控件需要请求其目标来更新自身状态时才会发送。在自动更新的过程中,每个控件会给它的目标发送一个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()被触发。

上面的示例代码应该是书中作者摘取的一段源码,可能看着不太懂,没有关系,大致了解工作机制即可。后面会对控件的使用做详细的介绍。


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


相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

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

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空