zoukankan      html  css  js  c++  java
  • IDL_GUI

    菜单栏设计
    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
    效果
     
    
    image
  • 相关阅读:
    数字资产交易所记录
    How to decode input data from a contract transaction without ABI?
    【收藏】ETH以太坊各个环境的公共的RPC服务!!!
    Solidity知识点集 — 溢出和下溢
    docker run 与docker start的区别
    子网掩码计算192.168.1.0/24 24 / 11
    Solidity-让合约地址 接受ETH的转账充值的 三种方式
    echarts的散点图
    debug.js中的length的错误
    26个工具类
  • 原文地址:https://www.cnblogs.com/shangguanjinwen/p/4262920.html
Copyright © 2011-2022 走看看