idl结果显示窗口如何缩小_科学网—IDL 创建窗口 - 钱磊的博文

一直以来我都觉得写程序创建一个窗口,添加些按钮,显示些会变化的文字是十分神奇的事。但是又懒又笨,一直没学会。最近开始考虑做一个观测模拟系统,模拟一个射电天文望远镜的控制界面。这种东西每个望远镜都由,估计代码也可以搞到,但是总觉得自己写的用起来才比较舒服。于是终于下定决心自己写几个窗口。

C语言写窗口估计是比较通用,但对于我来说可能太困难了,我估计连如何编译都学不会。于是最终决定用IDL。上网搜了一下并结合IDL帮助文档,我在用IDL创建窗口的道路上走了5步,大概有了点概念。

总的来说,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

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

转载本文请联系原作者获取授权,同时请注明本文来自钱磊科学网博客。

链接地址:http://blog.sciencenet.cn/blog-117333-518785.html

上一篇:关于Windows c盘磁盘空间低

下一篇:类比与天文学发展——读《通向实在之路》(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值