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
效果
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值