||
一、文字输入编辑组件
1.widget_text
1)主程序中: mbar_ssdrs_blocksize_show = widget_text(mbar_ssdrs_blockze,/editable,/frame,xsize=4,VALUE='8')
2)pState结构中要有‘mbar_ssdrs_blocksize_show:mbar_ssdrs_blocksize_show’
pState={mbar_ssdrs_blocksize_show:mbar_ssdrs_blocksize_show }
3)事件程序中
在要获取该变量的Button中调用下面的命令:
WIDGET_CONTROL,pstate.mbar_ssdrs_blocksize_show,get_value=Block_size
这样就将编辑组件中的最新数据赋给了变量‘Block_size’。
2.CW_FIELD
Result = CW_FIELD( Parent [, /ALL_EVENTS] [, /COLUMN] [, /DOUBLE] [, FIELDFONT=font] [, /FLOATING] [, /FOCUS_EVENTS] [, FONT=string] [, FRAME=pixels] [, IGNORE_ACCELERATORS=value] [, /INTEGER] [, /LONG] [, /NOEDIT] [, /RETURN_EVENTS] [, /ROW] [, /STRING][, TAB_MODE=value] [, TEXT_FRAME=pixels] [, TITLE=string] [, /ULONG] [, UNAME=string] [, UVALUE=value] [, VALUE=value] [, XSIZE=characters] [, YSIZE=lines] )
二、列表组件
本人尝试了好多次,最后用公共变量完成了工作需求。哪位大神有更好的方法,欢迎指正。
1)主程序中:
定义公共变量: common share,index
调用widget_droplist函数:mbar_ssdrs_Sensortype_list = WIDGET_DROPLIST(mbar_ssdrs_Sensortype,VALUE = SensorType_listitems,uname = 'SensorTypeLIST')
2)结构变量中:mbar_ssdrs_Sensortype_list :mbar_ssdrs_Sensortype_list
3)事件程序中
引用公共变量: common share,index
下拉菜单相应块中: index=ev.index(将选择的菜单项索引赋给全局变量)
在执行块中调用选择的变量值:print,pstate.SensorType_listitems[index]
三、IDL参数传递方式
IDL中的数据传递有很多方法,函数或过程可以直接进行参数变量的传入和传出,界面或对象也可以进行数据的存储和传递。如对界面组件的参数传递,有下面方法:
界面程序下的数据传递包括下面三种:(1)系统变量;(2)Common;(3)组件的uValue。经常用的是第三种方法,界面程序利用最顶级组件的uValue传递各种类型数据,一般用结构体或指针进行。
四、Base组件
这两天研究界面设计,才彻底明白了Base组件的使用和涵义。
IDL下的界面有很多的base,可以理解为容器,而且很多的时候一些组件的排列如果用了base会很方便。
WIDGET_BASE 这个函数是窗口程序的基础。所有窗口元素都放置在WIDGET_BASE返回的窗口上。
base = WIDGET_BASE(/ROW, TITLE='标题') 表示创建一个顶级窗口,/ROW或者/COLUMN用来指定元素摆放的方式。XOFFSET 和YOFFSET用来指定元素位置。一旦指定了/ROW或者COLUMN,坐标设置将被忽略.参数中的符号"/"表示该参数值设置为1。/row相当于 row = 1。也就是说,如果需要元素按照行来排列,可以使用/column(只有一列)或者row=n。
WIDGET_BASE(parent,/row.....)可以创建一个窗口放置在父窗口部件上。这时候不能指定TITLE参数,只有顶级窗口可以使用TITLE。
调用格式:base = WIDGET_BASE(TITLE = 'Example', MBAR=bar),用WIDGET_CONTROL, base, /REALIZE实现显示。
语法:参考IDL帮助文件
常用关键字
1. /floating 和/modal:前者浮动的窗口,后者为模式窗口,设定后该窗口关闭前无法进行其他操作。
2./tlb_kill_request_events:是否返回关闭事件,
IF TAG_NAMES(event, /STRUCTURE_NAME) EQ $
'WIDGET_KILL_REQUEST' THEN ...
3. MBAR:是否创建菜单栏,返回菜单栏的ID,调用格式:base = WIDGET_BASE(TITLE = 'Example', MBAR=bar)
4.子组件的对齐方式,只能选择其一: /ALIGN_BOTTOM | , /ALIGN_CENTER | , /ALIGN_LEFT | , /ALIGN_RIGHT | , /ALIGN_TOP] [, /BASE_ALIGN_BOTTOM | , /BASE_ALIGN_CENTER | , /BASE_ALIGN_LEFT | , /BASE_ALIGN_RIGHT | , /BASE_ALIGN_TOP
5.设置子组件的行数或列数,只能选择其一:[, COLUMN=value | , ROW=value],如果值为1,可以用“/COLUMN”“/ROW”。
6.复选或单选:/EXCLUSIVE或 /NONEXCLUSIVE
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 22:12
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社