爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4082|回复: 0

[混合编程] IDL编程学习之GUI事件响应案例

[复制链接]

新浪微博达人勋

发表于 2018-9-3 15:25:26 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
TIM截图20180903145705.jpg
该程序分2部分,主程序+事件响应程序;
一开始我发现主程序里没有响应程序名,那它是怎么调用的呢?
看书才知道,默认响应程序名为:组件名_event
基本问题:
1、每个组件对应一个ID;
2、创建组件后,它不会立即显示,而是需要用指令使其显示:
widget_control,tlb(顶级base的ID),/realize
控制顶级base显示,子组件会一起显示,但是设置了隐藏关键字map的除外
3、查询属性用widget_info,设置属性用widget_control
4、用xManager调用事件响应程序,调用语法:
xManager,Name,组件ID,[关键字]
关键字有:
Event_Handler 指定事件响应名称,如果未指定,默认的响应程序名称为Name+_event
No_block 程序运行中是否屏蔽命令行(没明白?)
5、事件响应程序是个pro,参数是“组件事件结构体”
格式:pro 事件程序名_event,事件结构体
事件结构体包括ID,Top(顶级base的标识),Handler,3者都是Long型
6、不明白的地方:用户定义名uname和用户定义值uvalue的用处是什么??
----------------------------------------------------------------
;主程序
pro widget_create_example
;创建界面顶级base
;200*200像素,标题名=good,column表示其子界面均行排列
tlb=widget_base(/column,xsize=200,ysize=200,title='good')
----------------------------------------------------------------
;创建按钮1,标签为close
button1=widget_button(tlb,value='close',$
  xoffset=100,uvalue='button1 uvalue',$
  uname='close')
----------------------------------------------------------------
;创建按钮1,标签为information
button2=widget_button(tlb,value='Pop MSG',$
  xoffset=100,uvalue=findgen(4,4),$
  uname='infor')
---------------------------------------------------------------
  ;组件例示,仅控制顶级base即可,否则不显示
  widget_control,tlb,/realize
----------------------------------------------------------------
  ;查看组件ID
  print,'tlb',tlb
  print,'button1',button1
  print,'button2',button2
----------------------------------------------------------------
  ;关联界面响应函数
  xmanager,'widget_create_example',tlb;,/no_block
end
----------------------------------------------------------------
;事件响应程序
pro Widget_Create_Example_Event,event
  ;查看event事件结构体
  help,event,/structure
  ;获取触发事件的组件ID
  print,'uName:',widget_info(event.id,/uname)
  ;获得触发事件的uvalue和value
  widget_control,event.id,get_value=curvalue,get_uvalue=curuvalue
  print,'value:',curvalue
  print,'uvalue:',curuvalue
end
在这个程序中,xmanager把base关联到响应程序,效果显示,2个按钮(子组件)共用了一个响应程序,
我们发现:
1、显示base就可以显示全部子组件,
2、把base关联响应程序就相当于把所有子组件关联了响应程序
可见,操作base=操作所有子组件

密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表