idl编程:用户界面的创建与事件响应

看着视频学习了一下午,终于把这个程序编写成功了,再此记录一下原代码,以后忘记时好查看。
功能:可以自主选择文件,打开尺寸较小的图片,然后显示在该界面上。
具体界面如下
idl编程:用户界面的创建与事件响应_第1张图片
代码如下:

pro test_DISPLAYimage_event,ev
  widget_control,ev.top,get_uvalue=pstate
  uname=widget_info(ev.id,/uname)
  case uname of
    'open':begin
      file=dialog_pickfile(title='选择文件',$
        filter=['*.bmp','*.jpg','*.tif'],$
        path=(*pstate).curpath,$
        get_path=curpath)
        if curpath ne '' then (*pstate).curpath=curpath
      if ~file_test(file) then return
        data=read_image(file)
        winid=(*pstate).winid
        wset,winid
        erase,255
        tv,data,/true
        ;显示文件路径
        widget_control,(*pstate).ttxt,set_value=file
      end
      else:
  endcase
end
pro test_DISPLAYimage
;主界面
  tlb=widget_base(mbar=mbar,title='fxs',/column)
    ;菜单栏
    wFile=widget_button(mbar,value='File')
    wOpen=widget_button(wFile,value='oPen')
    wExit=widget_button(wFile,value='exit')
    ;工具栏
    tbbase=widget_base(tlb,/frame,/row)
    topen=widget_button(tbbase,value='open.bmp',$
      /bitmap,uname='open')
    ttxt=widget_text(tbbase,value='',xsize=50)
    ;绘图区域
    wdraw=widget_draw(tlb,xsize=1000,ysize=500)
  
  widget_control,tlb,/realize
  ;设置窗口到屏幕中间
  device,get_screen_size=ss  ;获取显示器大小
  info=widget_info(tlb,/geometry) ;获取窗口大小
  tlb_xy=[info.scr_xsize,info.scr_ysize]
  offset=[ss-tlb_xy]/2
  widget_control,tlb,xoffset=offset[0],$
    yoffset=offset[1]
  ;
  widget_control,wdraw,get_value=winid
  wset,winid
  device,decomposed=0
  loadct,0
  erase,255
  
  pstate={WINID:winid,$
    ttxt:ttxt,        $
    curpath:''}
  widget_control,tlb,set_uvalue=ptr_new(pstate)
  
  ;事件管理
  XMANAGER,'test_DISPLAYimage',tlb,/no_block
end

你可能感兴趣的:(IDL)