IDL_GUI
菜单栏设计
PRO IDLGui
;构建界面
;显示
;添加事件
tlb=WIDGET_BASE(xsize=400,ysize=400,/column,mbar=mbar);实现基类
file=WIDGET_BUTTON(mbar, $ ;新建button,
value='文件')
open=widget_button(file,value='打开',/menu)
jpg=widget_button(open,value='jpg')
exist=widget_button(file,value='退出',/SEPARATOR)
WIDGET_CONTROL,tlb,/realize
END
效果------------------------------------》 定义一个界面并赋予事件过程
idlgui.pro
PRO IDLGui_event,event ;_event:程序关联
if(tag_names(event,/STRUCTURE_NAME) eq 'WIDGET_KILL_REQUEST') then begin
result=DIALOG_MESSAGE("是否关闭",/QUESTION)
CASE (result) OF
'Yes': BEGIN
WIDGET_CONTROL,event.TOP,/DESTROY
return
END
'No': BEGIN
RETURN
END
ELSE: BEGIN
END
ENDCASE
endif ;print,'now here'
uname=WIDGET_INFO(event.ID,/uname)
;help,event,
PRINT,'Now, you clicked '+uname
;获取变量
WIDGET_CONTROL,event.TOP,GET_UVALUE=ptr
CASE (uname) OF
'open': BEGIN
file=DIALOG_PICKFILE(FILTER='*.jpg',path=(*ptr).path,GET_PATH=path2);
;get_path:记住当前选中的路径然后赋值给path
(*ptr).path=path2
WIDGET_CONTROL,(*ptr).BTTEXT,SET_VALUE=file;设置值bttext
END
'show': BEGIN
WIDGET_CONTROL,(*ptr).BTTEXT,GET_VALUE=file;
READ_JPEG,file,data
wset,(*ptr).wind;设置当前窗口
TVSCL,data,/true;tv只认当前窗口
END
'exit': BEGIN
widget_control,event.top,/DESTROY;销毁
END
ENDCASE END PRO IDLGui
;构建界面
;显示
;添加事件
COMPILE_OPT idl2
tlb=WIDGET_BASE(/column,mbar=mbar,/TLB_KILL_REQUEST_EVENTS);实现基类 xsize=400,ysize=400,
file=WIDGET_BUTTON(mbar, $ ;新建button,
value='文件')
open=WIDGET_BUTTON(file,value='打开',/menu,uname='open')
jpg=WIDGET_BUTTON(open,value='jpg',uname='open')
exist=WIDGET_BUTTON(file,value='退出',/SEPARATOR,uname='exit')
;工具栏---带有系统图标的,如果是外部的图片用绝对路径
btbase=WIDGET_BASE(tlb,/row)
btOpen=WIDGET_BUTTON(btbase,value='open.bmp',/BITMAP,uname='open')
btshow=WIDGET_BUTTON(btbase,value='advanced.bmp',/BITMAP,uname='show')
;文本框
bttext=WIDGET_TEXT(btbase,XSIZE=70)
dbase=WIDGET_BASE(tlb,/row)
draw=WIDGET_DRAW(dbase,xsize=500,ysize=500)
;居中
DEVICE,GET_SCREEN_SIZE=screen_size;得到屏幕大小
result=WIDGET_INFO(tlb,/geometry);得到窗体的几何信息
;help,result
;计算窗体两边的偏移量
offset=[screen_size[0]-result.SCR_XSIZE,screen_size[1]-result.SCR_YSIZE]/2
;将得到的偏移量应用到应用程序
WIDGET_CONTROL,tlb,xoffset=offset[0],yoffset=offset[1],/realize
widget_control,draw,GET_VALUE=wind ;传递变量---结构体+指针
pstate={bttext:bttext,$
wind:wind, $
path:''}
ptr=PTR_NEW(pstate,/NO_COPY)
WIDGET_CONTROL,tlb,SET_UVALUE=ptr ;事件
Xmanager,'IDLGui',tlb ,/no_block;no_block----idl命令行失效,xmanager在最上面定义event
END
效果
IDL_GUI的更多相关文章
随机推荐
- MySQL 存储过程学习笔记
存储过程框架 DEMILITER $$ -- 重定义符 DROP PROCEDURE IF EXISTS store_procedure$$ -- 如果存在此名的存储过程,先删除 CREATE PRO ...
- 使用cronolog切割tomcat catalina.out文件
今天查看之前配置的tomcat发现catalina.out文件已经增大到接近5G,过不了多久就会将所在分区撑爆. 搜集了一下,大部分都使用cronolog切割catalina.out文件.按照这个方式 ...
- ios应运程序的五种状态
ios应运程序的五种状态即转化 从apple的官方文档扣下来的 5状态: Not running The app has not been launched or was running but w ...
- 向Array中添加希尔排序
希尔排序思路 我们在第 i 次时取gap = n/(2的i次方),然后将数组分为gap组(从下标0开始,每相邻的gap个元素为一组),接下来我们对每一组进行直接插入排序. 希尔排序实现 Functio ...
- Android:apk文件结构
Android apk文件,即Android application package文件. 每个要安装到Android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk,其中包含了应用的二进制 ...
- Nagios全方位告警接入-电话/微信/短信都支持
百度告警平台地址: http://gaojing.baidu.com 联系我们: 邮箱:gaojing@baidu.com 电话:13924600771 QQ群:183806029 Nagios接入 ...
- BZOJ 1001: [BeiJing2006]狼抓兔子 最小割
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...
- 获取任意可序列化对象的Xml字符串,方便在日志中查看任一所感兴趣的对象。
代码: public static string GetLoggingString(this object obj) { using (var stream = new MemoryStream()) ...
- 【bzoj1085】[SCOI2005]骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1757 Solved: 961[Submit][Statu ...
- JavaScript之四种继承方式讲解
在Javascript中,所有开发者定义的类都可以作为基类,但出于安全性考虑,本地类和宿主类不能作为基类,这样可以防止公用访问编译过的浏览器级的代码,因为这些代码可以被用于恶意攻击. 选定基类后,就可 ...
