【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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?