爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10246|回复: 8

[混合编程] IDL软件GUI编写与打包步骤

[复制链接]

新浪微博达人勋

发表于 2020-7-8 11:01:04 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
IDL软件界面GUI操作演示.png

IDL的软件打包,以前烦恼了很长时间,现在已经比较熟练了。
今天我有空,把以前写过的软件改了改,做一个详细的案例,分享给大家。


我做的IDL软件界面操作的演示见这个快手视频:
IDL软件界面GUI操作演示


打包好的软件在附件IDL_GUI.rar,解压缩之后,点击IDL_GUI.exe即可运行
IDL软件大小.png


如果不能运行,根据经验有以下原因:
1、被杀毒软件杀了,即IDL_GUI.exe不见了,捞回来即可;
2、缺少系统文件,可安装微软常用库,附件有64位和32位的MSVBCRT.AIO.2019.04.24,双击运行即可


IDL软件编写步骤:


1、制作工程
源代码在附件IDL_GUI.pro,搭配一个map.png用来调用,新建一个工程把2个文件放进去,在工程目录右击-构建工程,生成IDL_GUI.sav:
360截图20200708104310797.png
IDL构建项目.png
IDL构建项目成功.png
2、打包
附件makexe.txt是生成软件的批处理文件,首先重置,
make_rt后的参数,第1个是工程名,第2个是软件生成在哪个目录,第3个是构建工程后的sav文件,“/overwrite”表示覆盖


makexe.txt内容:
;重置IDL
.reset_session
make_rt,'idl_gui','D:\',savefile='C:\Users\Administrator\IDLWorkspace85\IDL_GUI\idl_gui.sav',/overwrite



把makexe.txt拖到控制台,会自动生成该文件的绝对路径,然后在前面加个@即可运行批处理文件,我这里运行如下:
IDL> @'C:\Users\Administrator\Desktop\makexe.txt'
% Compiled module: MAKE_RT.
make_dist routine finished. See log file:
D:\\idl_gui\log.txt
IDL>
这时,软件就生成好了,最后记得把map.png粘进去。

map.png

idl_gui.rar

34.26 MB, 下载次数: 29, 下载积分: 金钱 -5

MSVBCRT.AIO.2019.04.24.x64.exe

34.38 MB, 下载次数: 16, 下载积分: 金钱 -5

MSVBCRT.AIO_2019.04.24.x32.exe

19.39 MB, 下载次数: 11, 下载积分: 金钱 -5

IDL_GUI.pro

3.65 KB, 下载次数: 7, 下载积分: 金钱 -5

makexe.txt

131 Bytes, 下载次数: 4, 下载积分: 金钱 -5

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-7-8 11:07:35 | 显示全部楼层
IDL_GUI源代码:


pro IDL_GUI


  ;主界面大小与题目:
  BaseID = WIDGET_BASE(xsize=600,ysize=500,$
    title='IDL环境分析软件  软件作者:WHA,15951653725',$
    /TLB_RESIZE_NODRAW,mbar=bar)


  ;显示GUI:
  ;可以最后再显示界面,不然各个组件显示会有先后
  WIDGET_CONTROL, BaseID, /REALIZE


  ;左上角下拉菜单的内容,加/menu关键字表示还有下一级,不加无法加载下一级
  menu = WIDGET_BUTTON(bar, VALUE='参量',/MENU,/frame)


  option1=WIDGET_BUTTON(menu, VALUE='颗粒物')
  option2=WIDGET_BUTTON(menu, VALUE='SO2')
  option3=WIDGET_BUTTON(menu, VALUE='O3',/MENU)


  option31=widget_button(option3,value='NOX')
  option32=widget_button(option3,value='VOCs',/separator)
  option33=widget_button(option3,value='气温',/separator)




  ;顶层组件窗口名在title中设置,子组件显示名在value中设置
按钮位置用[xy]offset设置
;tooltip即悬浮提示
  button1=widget_button(BASEID,xsize=120,ysize=30,value='预处理',$
    xoffset=450,yoffset=25,tooltip='数据预处理计算按钮')
  button2=widget_button(BASEID,xsize=120,ysize=30,value='地图',$
    xoffset=450,yoffset=75,tooltip='打开静态地图')
  button3=widget_button(BASEID,xsize=120,ysize=30,$
    value='PM',xoffset=450,yoffset=125,tooltip='计算颗粒物突出时段')
  button4=widget_button(BASEID,xsize=120,ysize=30,value='O3',$
    xoffset=450,yoffset=175,tooltip='计算O3归一化日变化')
  button5=widget_button(BASEID,xsize=120,ysize=30,value='VOCs',$
    xoffset=450,yoffset=225,tooltip='VOCs臭氧生成潜势')


  ;新建widget_window(快速可视化的窗口)
  wDraw = WIDGET_WINDOW(BaseID, XSIZE=400, YSIZE=400,$
    /button_events,$;单击产生事件
    /frame,$;给图加个框
    xoffset=20,yoffset=30)
  WIDGET_CONTROL, wDraw, GET_VALUE=oWin
  oWin.Select


  ;画图数据:
  n = 100
  seed = -121147L
  x = 2*RANDOMU(seed, n)
  y = RANDOMU(seed, n)
  z = 100*(EXP(-((4*x-2)^2 + (7-9*y)^2)/4) + $
    EXP(-((4*x+1)^2)/49 - (1-0.9*y)) + $
    EXP(-((4*x-7)^2 + (6-9*y)^2)/4) - $
    EXP(-(4*x-4)^2 - (2-9*y)^2))
  ;克里金插值:
  result = KRIG2D(z, x, y, EXPONENTIAL=[0.5,0.2,1], $
    NX=100, NY=100, XOUT=xout, YOUT=yout)
  ;读取预存地图:
  fig=image('.\map.png',position=[0,0,1,1],/OVERPLOT)
  ;在地图上叠加等值线图:
  fig= CONTOUR(result,position=[0,0,1,1],axis_style=0,$
    /fill,transparency=50, $
    rgb_Table=33,/current);要有/current


  ;5个按钮关联事件:
  xmanager,'GUI',button1,EVENT_HANDLER='button1_pro',/no_block
  xmanager,'GUI',button2,EVENT_HANDLER='button2_pro',/no_block
  xmanager,'GUI',button3,EVENT_HANDLER='button3_pro',/no_block
  xmanager,'GUI',button4,EVENT_HANDLER='button4_pro',/no_block
  xmanager,'GUI',button5,EVENT_HANDLER='button5_pro',/no_block
  ;菜单关联事件:
  xmanager,'GUI',option1,EVENT_HANDLER='option'
  xmanager,'GUI',option2,EVENT_HANDLER='option'
  xmanager,'GUI',option33,EVENT_HANDLER='option'
  xmanager,'GUI',option31,EVENT_HANDLER='option'
  xmanager,'GUI',option32,EVENT_HANDLER='option'
  xmanager,'GUI',option33,EVENT_HANDLER='option'


end


;事件函数
pro option,event
  tip=dialog_message(title='提示','该功能尚未开发!')
end


pro button1_pro,event
  tip=dialog_message(title='提示','预处理计算已完成,耗时:00:08:56')
end


pro button2_pro,event
  spawn,'.\map.png'
end


pro button3_pro,event
  tip=dialog_message(title='提示','颗粒物在高峰出现在6月17日上午09:00')
end


pro button4_pro,event
  tip=dialog_message(title='提示','O3在每天14:00较高')
end


pro button5_pro,event
  tip=dialog_message(title='提示','2019年08月06日VOCs日均浓度为56.40μg/m3,对测试所得的VOCs物种进行臭氧生成潜势(OFP)分析,前10种物质及其对OFP的贡献率分别是:反-2-丁烯21.01%,1-丁烯15.11%,顺-2-丁烯12.59%,1-戊烯7.75%,异戊二烯6.59%,甲苯5.35%,1,2,4-三甲苯2.33%,邻二甲苯2.19%,异戊烷2.15%,正丁烷2.03%,总OFP为41.84μg/m3,前10种物质共计占总OFP的77.12%。')
end

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-10-30 11:25:27 | 显示全部楼层
【IDL-GUI示例:真三维与联动图】

真三维的GUI软件已经打包成功,感觉IDL的软件打包比PyQt5好使,至少没有那么多兼容性问题,
考虑到商业限制,IDL的开源版GDL不知能否一用?


                               
登录/注册后可看大图

                               
登录/注册后可看大图











密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-10-30 14:40:52 | 显示全部楼层
W83085RFKX(LAESW6AGB0.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-7-3 23:07:27 | 显示全部楼层
厉害,谢谢,学习到了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-7-24 13:47:37 | 显示全部楼层
【windows安全中心误杀】


IDL软件误杀.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-6-8 16:10:25 | 显示全部楼层
{:eb302:}{:eb302:}{:eb302:}你可太厉害了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-6-8 23:15:29 | 显示全部楼层

这帖子都两年了,时间真快
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-6-10 15:32:27 | 显示全部楼层
15195775117 发表于 2022-6-8 23:15
这帖子都两年了,时间真快

我这几天刚接触GUI。关于idl,您真的分享了超级多有用的知识!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表