青未了分享 http://blog.sciencenet.cn/u/yanghang

博文

IDL&ENVI界面设计-编程中实际问题解决

已有 3602 次阅读 2018-8-8 16:32 |个人分类:IDL学习笔记|系统分类:科研笔记

 一、文字输入编辑组件

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_FIELDParent [, /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组件的使用和涵义。

  1. IDL下的界面有很多的base,可以理解为容器,而且很多的时候一些组件的排列如果用了base会很方便。

  2. WIDGET_BASE 这个函数是窗口程序的基础。所有窗口元素都放置在WIDGET_BASE返回的窗口上。

  3. base = WIDGET_BASE(/ROW, TITLE='标题') 表示创建一个顶级窗口,/ROW或者/COLUMN用来指定元素摆放的方式。XOFFSET 和YOFFSET用来指定元素位置。一旦指定了/ROW或者COLUMN,坐标设置将被忽略.参数中的符号"/"表示该参数值设置为1。/row相当于 row = 1。也就是说,如果需要元素按照行来排列,可以使用/column(只有一列)或者row=n

  4. WIDGET_BASE(parent,/row.....)可以创建一个窗口放置在父窗口部件上。这时候不能指定TITLE参数,只有顶级窗口可以使用TITLE。

  5. 调用格式: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







https://wap.sciencenet.cn/blog-346157-1128229.html

上一篇:IDL&ENVI文件及文件名操作
下一篇:IDL数学与统计分析——IMSL数学库
收藏 IP: 124.65.153.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-10 04:46

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部