【IDL】弹出界面事件响应示例程序

IDL弹出界面事件响应示例程序,界面如下图:

 

知识点:
1、界面框架结构与编写实现;
2、界面事件响应与图像显示;
3、弹出界面构建与事件响应;
4、JPEG文件选择、读取与显示;

源代码:

PRO SELECTFILE_EVENT,ev
  WIDGET_CONTROL,ev.TOP,get_UValue = pState
  CASE WIDGET_INFO(ev.ID,/uname) OF
    'select': BEGIN
     ;
     file = DIALOG_PICKFILE(filter ='*.jpg')
     IF QUERY_JPEG(file) EQ 1 THEN BEGIN
       ;
       (*pState).RESULT = file
       WIDGET_CONTROL,(*pState).WTEXT, set_Value = file
       
     ENDIF
    END
    'ok' : WIDGET_CONTROL,ev.TOP,/destroy
    ELSE:
  ENDCASE
END
FUNCTION SELECTFILE
  ;
  tlb = WIDGET_BASE(title ='选择文件',/row)
  wText = WIDGET_TEXT(tlb,xsize =20)
  wButton = WIDGET_BUTTON(tlb,value = '选择JPG图像',uname ='select')
  wButton = WIDGET_BUTTON(tlb,value = '确定',uname ='ok')
  ;
  WIDGET_CONTROL,tlb,/realize
  pState = PTR_NEW({wText:WTEXT,result:''})
  WIDGET_CONTROL,tlb,set_UValue = pState
  XMANAGER,'selectfile',tlb;,/no_block
  r = (*pState).RESULT
  PTR_FREE,pState
  RETURN,r
 
END

PRO WTLB_EVENT,ev
  WIDGET_CONTROL,ev.TOP,get_uvalue= pstate
 
  CASE WIDGET_INFO(ev.ID,/uname) OF
    'open': BEGIN
     selectedFile = SELECTFILE()
     IF QUERY_JPEG(selectedFile) EQ 1 THEN BEGIN
       READ_JPEG,selectedFile,data,/true
       TV,data,/true
     ENDIF
     
    END
    ELSE:
  ENDCASE
END

PRO DISPLAYIMAGE
 ;       wbase -8
  ;  /      \      \
  ; menu   toolbar draw
  ;  open-11 open-13   -7
  ; ENVI,/restore_base_save_files
  ;  ENVI_BATCH_INIT
  ;
  wtlb = WIDGET_BASE(title='jpeg读取显示',$
    mbar = wMenuBase,$
   /column)
  wFile = WIDGET_BUTTON(wMenuBase,value='文件',/menu)
  wOpen = WIDGET_BUTTON(wFile,value = '打开',uname='open',$
    EVENT_PRO = 'wMenuOpen')
  ;
  wtool = WIDGET_BASE(wtlb,/frame)
  wtoolOpen = WIDGET_BUTTON(wtool,value= '打开',uname='open')
  ;
  wDraw = WIDGET_DRAW(wtlb,xsize = 600,ysize =400)
  ;
 WIDGET_CONTROL,wtlb,/real,set_uvalue={wDraw:WDRAW}
 
  XMANAGER, 'wtlb', wtlb,/no_block
 
END

 

posted @   ENVI-IDL技术殿堂  阅读(418)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示