ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【IDL】编写程序启动界面

2022-06-08 13:03:11  阅读:195  来源: 互联网

标签:WIDGET 界面 编写程序 BUTTON value tlb IDL true


很多时候程序启动时需要花一定的时间进行界面初始化、配置文件读取等操作,需要用户等待,此时如果有个带漂亮图片或程序版权信息的界面在那放着会让人感觉程序启动中,马上就起来了。
从IDL实现上讲,无非就是显示一个不带菜单,不带标题栏的widget_base,里面显示了一张图片。
下面以一个常规的界面程序为例,注意代码中的调用部分。


启动界面

程序主界面

代码如下:

;$Id: show_splash_screen.pro 4 2008-01-30 21:13:44Z mpiper $

;+

; Shows an image without a window border on the screen.

;

; @returns widget identifier of top-level base

; @param image {in}{type=2 or 3 dimensional array} an image to

;       display

; @keyword true {in}{optional}{type=integer, 0-3}{default=0} order of

;         bands, 0 if 8-bit image

; @keyword order {in}{optional}{type=boolean} orientation of image

; @keyword title {in}{optional}{type=string} title of window to

;         display in icon

;-

;启动界面

function show_splash_screen, image, true=true, order=order

  compile_opt idl2

  on_error, 2

 

  true_local = n_elements(true) eq 0 ?  0 : true

 

  sz = size(image, /structure)

 

  if (true_local eq 0 and sz.n_dimensions ne 2) then $

   message, 'TRUE keyword must be set to 1, 2, 3 ' $

    + 'for 24-bit image'

   

  if (true_local ne 0 and sz.n_dimensions ne 3) then $

   message, 'TRUE keyword must be set to 0 for 8-bit image'

   

  xind = (true_local ne 1) ? 0 : 1

  yind = ((true_local eq 0) or (true_local eq 3)) ? 1 : 2

 ;屏幕分辨率计算

  device, get_screen_size=screen_size

 ;界面偏移量

  xoffset = (screen_size[0] - sz.dimensions[xind]) / 2

  yoffset = (screen_size[1] - sz.dimensions[yind]) / 2

 

  tlb = widget_base(tlb_frame_attr=4, /column, $

   xpad=0, ypad=0, xoffset=xoffset, yoffset=yoffset)

  draw = widget_draw(tlb, xsize=sz.dimensions[xind], $

   ysize=sz.dimensions[yind])

   

  widget_control, tlb, /realize

  widget_control, draw, get_value=win_id

 

  wset, win_id

  tv, image, true=true_local, order=keyword_set(order)


  return, tlb

end

 

;启动界面示例代码
;
pro splash_example

 ;读取启动界面要显示的数据

  file = filepath('rose.jpg', SUBDIRECTORY=['examples','data'])

  data = read_image(file)


 ;开始启动界面***

  splash_base = show_splash_screen(data,/true)

  ;

 ;创建程序内容,初始化界面、程序、数据等,注意,程序界面的tlb先是要隐藏的

  tlb = WIDGET_BASE($

   /column, $

  

   map = 0,$ ;隐藏

   mbar =result,$

   title ='test_button')

  ;

 WIDGET_CONTROL,tlb,/realize

 

  menu = WIDGET_BUTTON(result, value ='文件(&F)')

  fmenu = WIDGET_BUTTON(menu, value ='√打开')

 ;menu关键字

  mMenu = WIDGET_BUTTON(menu, value ='进入',/menu)

  tMenu = WIDGET_BUTTON(mMenu, value ='二级',/menu)

 ;separator关键字

  eMenu = WIDGET_BUTTON(menu, value ='退出',/SEPARATOR)

 

  ubase = WIDGET_BASE(tlb,/row)

  dbase = WIDGET_BASE(tlb,/row,/frame)

  ;

  b = WIDGET_BUTTON(ubase,value = '按钮',tooltip = '创建的button')

  b = WIDGET_BUTTON(ubase,value = '菜单', $

   tooltip = '菜单加对号')

  h = WIDGET_BUTTON(ubase,value = BINDGEN(2,40))

  ;

  bit =WIDGET_BUTTON(ubase,value =filepath('colorbar.bmp', SUBDIRECTORY=['resource','bitmaps']),/bitmap)

 ;单选button'

  exbase = WIDGET_BASE(dbase,/EXCLUSIVE,/column,/frame)

  eb1 = WIDGET_BUTTON(exbase,value ='对',uName = 'right',/NO_RELEASE )

  eb2 = WIDGET_BUTTON(exbase,value ='错',uName = 'error',/NO_RELEASE )

 ;选择第一个按钮

 widget_control,eb1,/SET_BUTTOn

 ;复合选择button

  nexbase = WIDGET_BASE(dbase,/NONEXCLUSIVE,/column)

  eb1 = WIDGET_BUTTON(nexbase,value ='envi')

  eb2 = WIDGET_BUTTON(nexbase,value ='idl')

 ;选择第一个按钮

 widget_control,eb1,/SET_BUTTOn

 ;创建显示组件

  wDraw = Widget_Draw(tlb,xsize = 600,ysize = 400)

 

 ;等待2秒

  wait,2

 

 ;销毁启动界面***

  Widget_control, splash_base,/destroy

 

 ;计算界面居中

 ;屏幕分辨率计算

  device, get_screen_size=screen_size

  geoInfo = widget_info(tlb,/geo)

 ;界面偏移量

  xoffset = (screen_size[0] - geoInfo.xSize) / 2

  yoffset = (screen_size[1] - geoInfo.ySize) /2

 Widget_Control,tlb, xoffset = xoffset, $

   yoffset = yoffset

   

 ;显示程序主界面
 widget_control,tlb,/map
 

;后面其他功能代码

;.....

end


知识点总结:
1、界面组件布局
2、菜单、按钮(单选、复选)按钮
3、启动界面

标签:WIDGET,界面,编写程序,BUTTON,value,tlb,IDL,true
来源: https://www.cnblogs.com/enviidl/p/16355248.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有