菜单栏设计
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
效果