菜单栏设计
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的更多相关文章

随机推荐

  1. [shell基础]——sed命令

    关于sed sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓 ...

  2. js之基本包装类型

    为了便于操作“基本类型值”,JS 提供了 三个 特殊的引用类型:Boolean.Number.String.这些类型和其他引用类型相似,但同时 也具备 与各自基本类型相应的特殊行为. 实际上:每当读取 ...

  3. linux入门基础_centos(二)--fdisk分区

    课时10 使用fdisk进行磁盘管理             fdisk是来自IBM的老牌分区工具,支持绝大多数的操作系统,几乎所有的linux的发行版本都装有fdisk,包括在linux的rescu ...

  4. python代码风格指南:pep8 中文翻译

    摘要 本文给出主Python版本标准库的编码约定.CPython的C代码风格参见​PEP7.本文和​PEP 257 文档字符串标准改编自Guido最初的<Python Style Guide&g ...

  5. Kibana4学习<二>

    生产环境部署 Kibana4 是是一个完整的 web 应用.使用时,你需要做的只是打开浏览器,然后输入你运行 Kibana 的机器地址然后加上端口号.比如说:localhost:5601 或者 htt ...

  6. c++ ip地址相关

    #include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <sys/typ ...

  7. UVALive - 6571 It Can Be Arranged 最大流

    题目链接: http://acm.hust.edu.cn/vjudge/problem/48415 It Can Be Arranged Time Limit: 3000MS 问题描述 Every y ...

  8. IIS和MVC

    现象:MVC项目部署到IIS(7.5)后,浏览时只显示文件目录,不是网站 解决办法 1.服务器安装程序对应的Framework版本 2.服务器安装程序对应的MVC版本 3.安装CGI和ISAPI扩展: ...

  9. 【BZOJ】【1492】【NOI207】货币兑换Cash

    DP/CDQ分治 orz Hzwer copy了下他的代码……结果在while(j<top......)这一句中把一个括号的位置打错了……找了我一个多小时才找到TAT 很神奇……顺便贴下CDQ的 ...

  10. iOS Automation Test

    google resource for KIF: http://www.oschina.net/translate/ios-ui-testing-with-kif