IDL GUI 开发

1、代码操作:

pro testWidget
;创建背景窗体,顶级窗口
tlb=widget_base(xsize=400,$
  ysize=400,$
  mbar=menubar,$
  ;按列排
  ;/row,$
  ;按行排
  /column,$
  title='IDL 窗口')
;创建一个菜单,菜单上含有子菜单
wfile=widget_button(menubar,$
  value='文件',/menu)
wedit=widget_button(menubar,$
  value='编辑',/menu)
whelp=widget_button(menubar,$
  value='帮助',/menu)
wedit1=widget_button(wedit,$
  value='撤销')
wedit2=widget_button(wedit,$
  value='剪切')
wedit3=widget_button(wedit,$
  value='复制')
wedit4=widget_button(wedit,$
  value='粘贴')
wnewfile=widget_button(wfile,$
  value='新建工程')
wnewfile=widget_button(wfile,$
  value='新建文件')
wopen=widget_button(wfile,$
  value='打开文件')
wsave=widget_button(wfile,$
  value='保存文件')
whelp1=widget_button(whelp,$
  value='帮助内容')
whelp2=widget_button(whelp,$
  value='检查更新')
whelp3=widget_button(whelp,$
  value='关于本软件')
;创建1个按钮
wbutton=widget_button(tlb,$
  value='按钮')
wbase=widget_base(tlb,$
  frame=1,$
  /EXCLUSIVE)
wbutton1=widget_button(wbase,$
  value='单选1')
wbutton2=widget_button(wbase,$
  value='单选2')
fbase=widget_base(GROUP_LEADER=tlb,$
  xsize=200,$
  ysize=200,$
  xoffset=50,$
  yoffset=50,$
  /floating,title='floating')
widget_control,fbase,/realize

mbase=widget_base(group_leader=tlb,$
  xsize=200,ysize=200,$
  xoffset=400,$
  yoffset=200,$
  /modal,title='modal')
widget_control,mbase,/realize

wbase=widget_base(GROUP_leader=tlb,$
  /modal,title='模式框',$
  XSIZE=100,$
  YSIZE=100)
widget_control,wbase,/realize

ttlb=widget_base(xsize=200,ysize=200,$
  title='TLB_FRAME_ATTR=4',$
  xoffset=000,$
  yoffset=400,$
  TLB_FRAME_ATTR=4)
WIDgET_CONTROL,ttlb,/realize
widget_control,tlb,/realize
;tv,tlb
end

2、实现效果

3、余下内容
总的来说,IDL是先创立一个基本窗口,里面没有东西,代码如下。
PRO experiment_event, ev
print,'draw event',ev.x,ev.y,ev.press,ev.release ; 分别打印出点下鼠标的坐标和松开鼠标的坐标,此句会有两行输出
END


PRO experiment
main = WIDGET_BASE() ; 此处是建立一个基本窗口
draw = WIDGET_draw(main, /button_events); 在基本窗口中建立一个画图窗口,而且起到按钮的功能(对鼠标点击有反应)
WIDGET_CONTROL, main, /REALIZE ; 此句将窗口画出
XMANAGER, 'experiment', main ; 在窗口中进行的操作应写在此句之前,

                             ; 单引号中的单词应该第一个自过程中_event前的单词相同
END



有了基本窗口之后,就可以在此窗口内再创建窗口或者按钮。

PRO experiment_event, ev
widget_control, ev.id, get_uvalue=uvalue

 CASE uvalue of ; 由于定义了两个控件(窗口):一个按钮、一个画图窗口,所以分情况对待
  'go' : print,'GO button' 
  'draw' : print,'draw event',ev.x,ev.y,ev.press,ev.release
 END
END

PRO experiment2
main = WIDGET_BASE(title='OTF experiments',/row)
btn = widget_button(main,uvalue='go',value='GO')
draw = WIDGET_draw(main,uvalue='draw', /button)
WIDGET_CONTROL, main, /REALIZE
XMANAGER, 'experiment', main,/no_block
END

窗口的大小可以通过xsize和ysize控制。

PRO experiment_event, ev
widget_control, ev.id, get_uvalue=uvalue

 CASE uvalue of
  'go' : print,'GO button'
  'draw' : print,'draw event',ev.x,ev.y,ev.press,ev.release
 END
END


PRO experiment3
main = WIDGET_BASE(title='OTF experiments',/row,/frame,xsize=500,ysize=500)
cntl = widget_base(main,/column,/frame,xsize=100,ysize=100)
btn = widget_button(cntl,uvalue='go',value='GO')
draw = WIDGET_draw(main,uvalue='draw', /button)
WIDGET_CONTROL, main, /REALIZE
XMANAGER, 'experiment', main,/no_block
END

按钮的功能可以定义为关闭窗口,还可以在画图窗口画一个图。

PRO experiment_event, ev
widget_control, ev.id, get_uvalue=uvalue
widget_control, ev.top, /destroy ; 按QUIT按钮的时候关闭窗口
 CASE uvalue of
  'quit' : print,'QUIT button'
  'draw' : print,'draw event',ev.x,ev.y,ev.press,ev.release
 END
END

PRO experiment4
main = WIDGET_BASE(title='OTF experiments',/row,/frame,xsize=500,ysize=500)
cntl = widget_base(main,/column,/frame,xsize=100,ysize=100); 定义一个子窗口
btn = widget_button(cntl,uvalue='quit',value='QUIT',xsize=100,ysize=100);在子窗口中放一个按钮
draw = WIDGET_draw(main,uvalue='draw', /button,xsize=300,ysize=300)
WIDGET_CONTROL, main, /REALIZE
a=indgen(100,100) 
tv,a ; 在画图窗口画一个图
XMANAGER, 'experiment', main,/no_block ; note this name in '' must be the same
                                      ; as that before _event in last PRO!!!
END

原则上可以加很多按钮,实现不同功能,画图窗口也可以调整。

PRO experiment_event, ev
widget_control, ev.id, get_uvalue=uvalue
;widget_control, ev.top, /destroy
widget_control, ev.top, get_uvalue=textwid
 CASE uvalue of
  'one' : widget_control, textwid, set_value='Button 1 Pressed'
  'two' : widget_control, textwid, set_value='Button 2 Pressed'
  'quit' : widget_control, ev.top, /destroy
;   'draw' : print,'draw event',ev.x,ev.y,ev.press,ev.release
 ENDCASE
END

PRO experiment5
main = WIDGET_BASE(title='OTF experiments',/row,/frame,xsize=600,ysize=500)
;cntl = widget_base(main,/row,/frame,xsize=100,ysize=100)
cntl = widget_base(main,/column,/frame,xsize=100,ysize=100)
;cntl = main
btn1 = widget_button(cntl,uvalue='one',value='ONE',xsize=100,ysize=62)
btn2 = widget_button(cntl,uvalue='two',value='two',xsize=100,ysize=62)
btn = widget_button(cntl,uvalue='quit',value='QUIT',xsize=100,ysize=62)
text = widget_text(main,xsize=20)
draw = WIDGET_draw(main,uvalue='draw', /button,xsize=300,ysize=300)
widget_control, main, set_uvalue=text
WIDGET_CONTROL, main, /REALIZE
a=indgen(300,300)
tv,a
XMANAGER, 'experiment', main,/no_block ; note this name in '' must be the same
                                      ; as that before _event in last PRO!!!
END

 

接下来要做的是就是写一个内核了,生成一些可以往窗口里放的东西,开更多的窗口也没有原则性困难了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值