labview界面分隔和自定义窗口大小

2023-05-16

>>>>>>我的博客目录导航

转自  statemic【LabVIEW程序界面的布局】

       控件的显示效果与监视器是密切相关的,因此在程序设计时需要考虑目标监视器的颜色、分辨率等因素,并明确运行该应用程序所需要的最低硬件要求。在很多的论坛中经常会看到问题:如何才能确保应用程序的界面在更高的分辨率上运行时不会变形?这实际上是一个界面设计问题,而思考如何解决它却是应该从程序设计时就开始,而不是等到程序设计完成后再探讨解决方案。LabVIEW中并没有提供一种有效的方式或工具来解决这个问题,但是我个人认为这与LabVIEW无关,更应该把它归纳为通用的程序设计问题,解决它需要比较良好的界面设计、布局和分配作为前提。

       事实上,程序往往会规定一个最低的运行分辨率,在此分辨率以上的显示器上程序界面应该能够正确地被显示出来。而在LabVIEW中,控件往往在高分辨率的显示器上被拉大或者留有部分的空白,这使得整个界面完全扭曲了程序员最初的设计。

       为了能够更加清晰问题的本质和寻求解决问题的方案,有必要对LabVIEW的前面板界面进行确认和分析。如图 11所示,一个VI的窗口由几个部分组成:整个红色的区域称为一个窗口(Windows),而蓝色的区域称为一个面板(Panel)。从图中可以看出,窗口中的标题栏、菜单栏和工具栏并不属于面板。

                                                               LabVIEW程序界面的布局 - statemice - Change

                                                                                         图11 VI窗口区域定义

      LabVIEW允许程序员将面板(Panel)划分为若干个独立的窗格(Pane)。使用Controls>>Modern>>Containers选板中的Horizontal Splitter Bar和Vertical Splitter Bar可以将VI的面板进行任意的划分,如图 12所示。

                                                                                       LabVIEW程序界面的布局 - statemice - Change

                                                                                            图12 Containers选板

      划分之后的VI前面板如图 13所示,可以看出图中的Panel(蓝色区域)已经被划分为了5个窗格Pane,每一个绿色区域都被称为一个Pane。当Panel上只有一个Pane时,Panel与Pane会重合。因此,窗口(Windows)包含整个界面,而1个窗口只有1个面板(Panel),该面板能够被划分为若干个独立的窗格(Pane)。每个Pane都包含其特有的属性和滚动条,而Pane之间使用Splitter进行分隔。

                                                                       LabVIEW程序界面的布局 - statemice - Change

                                                                                         图13 划分之后的VI窗口定义

      在Splitter上右击可以设置Splitter的相关属性,如图 14所示。Locked属性可以设置Splitter是否被锁定,被锁定的Splitter的位置将无法被移动。与控件类似,LabVIEW提供了3种Splitter样式:Modern、System和Classic。程序员可以使用着色工具设置Modern和Classic Splitter的颜色,使用手型工具调整Splitter的位置以及使用选择工具调整Splitter的大小。

                                                                                         LabVIEW程序界面的布局 - statemice - Change

                                                                                            图14 Splitter右键快捷菜单

        现在再回头看本小节开头提到的分辨率问题,从常识上判断,当程序从低分辨率界面向高分辨率界面转移时,可以有如下的解决方案:

1、  界面上的控件变大;

2、  界面控件的位置重新分布,以平衡空白位;

3、  界面控件的相对位置不动,留出适当的空白位。

        在实际操作中,上述的3种方式似乎很难实现以满足界面大小变化带来的自适应问题。比如第3种方式看似简单,却同样存在着疑问:应该在哪里留出空白位,是现有控件的左边?右边?上边?还是下边?打开一些标准的Windows界面程序,不难看出,往往程序中结合使用了上面的3种方式。部分的控件位置和大小不变,留出适当的空白位给其它的控件,如Listbox、Graph、Tree等。因此这类控件显示的信息较多,并且外观单一,改变它们的大小对整个界面的布局不会产生影响。

       因此,在程序开始设计的初级阶段就有必要设计界面的大致控件布局和分布,以明确界面在不同分辨率下的调整方式。如果界面控件过多,则可以通过其它的方式进行规避(比如对话框等),确保界面的大小调整不会影响到控件布局的变化。

【应用(下载)】

        本节将以一个标准的Windows测试界面为例说明界面设计的方式和步骤。首先,需要根据程序的功能划分VI的Panel,并决定将其分为多少个Pane。图 15将界面分为了8个Pane,依次为:工具栏、帮助栏、测试信息栏、波形采集栏、状态栏(登陆人员栏、说明栏、测试内容栏和测试时间栏)。

                                                           LabVIEW程序界面的布局 - statemice - Change

                                                                                                   图15 划分Panel

       其次,在状态栏的四个区域中分别加入一个String型Indicator,并且勾选Indicator的右键快捷菜单选项:Fit Control to Pane,也就是说当Pane变化的时候String的大小也随之发生改变以确保String控件能够填充整个Pane,如图 16所示。

                                                            LabVIEW程序界面的布局 - statemice - Change

                                                                                 图16 在状态栏中加入Indicator控件

单击窗口的最大化按钮,可以看出整个状态栏的高度变大而最右侧子状态栏的宽度变大,如图 17所示。

                                                          LabVIEW程序界面的布局 - statemice - Change

                                                                                       图17 最大化之后的状态栏

        事实上,当窗口(或者Pane)大小发生变化时往往不希望状态栏的高度发生改变,而只需要改变其中某一个Pane的长度就可以了。单击“还原”按钮,使窗口回到图 16所示的状态。在底部的蓝色Splitter上右击,选择快捷菜单中的Splitter Stick Bottom选项,如图 18所示。该选项表示在Splitter变化时始终保持底部的相对位置不变。

                                                              LabVIEW程序界面的布局 - statemice - Change

                                                                                        图18 Splitter右键快捷菜单

再次最大化窗口,此时状态栏的高度将保持不变,而最右侧的子状态栏的宽度将变大,如图 19所示。

                                                              LabVIEW程序界面的布局 - statemice - Change

                                                                                         图19 最大化之后的状态栏

       如果希望在VI窗口改变时,修改第2个子状态栏的宽度,而其它的子状态栏宽度保持不变,应该如何设置呢?单击“还原”按钮,使窗口回到图 16所示的状态。如图 20所示,单击图中所示的红色Splitter,勾选Splitter Sticks Right,此时再次改变窗口的大小将会改变第2个子状态栏的宽度。

                                                               LabVIEW程序界面的布局 - statemice - Change

                                                                                             图20 设置Splitter属性

        同理,设计工具栏如所示。图中使用的按钮都是LabVIEW自带的按钮样式,需要使用Type Def.自定义控件加以替换。程序将工具栏分为2个部分:操作按钮部分和帮助部分。而对比图 19可以看出,将最上层的Splitter颜色设置为与Pane的底色一致,这样可以隐藏Splitter。

                                                                 LabVIEW程序界面的布局 - statemice - Change

                                                                                                图 21 设置Splitter属性

        LabVIEW运行对每一个Pane设置不同的背景色,确保Pane的独立性。如图 22所示,在界面上放置不同的控件以丰富界面显示效果,勾选Tab控件和Graph控件的右键快捷属性:Fit Control to Pane。因为Graph控件大小的改变对整个界面的布局没有影响,因此将界面的Splitter属性设置为当Pane变化时修改Graph的大小就可以了。

                                                                 LabVIEW程序界面的布局 - statemice - Change

                                                                                                             图22 VI前面板

       如前所述,对任一个程序而言都有一个最低的分辨率要求,同时也存在着一个最小的界面要求,确保在最小的界面上能够将所有控件完整显示出来。调整整个VI前面板窗口的大小,确保所有的控件均能够完整显示。按下Ctrl+I键打开VI Properties属性面板,选择Windows Size页,如图 23所示。单击“Set to Current Panel Size”,单击OK按钮。

                                                                 LabVIEW程序界面的布局 - statemice - Change

                                                                                                        图23 Windows Size属性页

       再次改变VI的前面板大小,可以看出整个界面的布局并不受Panel大小的影响,能够正常显示。因此,界面的分辨率自适应问题的解决并不是一蹴而就的,而是需要在程序界面设计阶段就加以考虑和布局的。

Ø  在程序可接受的最低分辨率的显示器上开发;

Ø  划分Panel的区域,并且明确各个区域的功能;

Ø  尽量至少选择一种大小可伸缩的控件(ListBox、Tab、Multicolumn Listbox、Table、Tree、Chart、Graph、Picture、Sub Panel等);

Ø  尽可能地使用Splitter划分不同的区域,对部分Splitter而言可以将其背景色设置为与Pane的背景色一致以隐藏Splitter;

Ø  设置Splitter的属性,明确Splitter的变化方式;

Ø  设置Pane的属性(颜色、是否显示滚动条等);

Ø  设置Panel的最小显示大小;

Ø  结合Type Def.和Strict Type Def.控件,完善控件的摆放和显示效果;

Ø  将Splitter的Lock属性设置为True。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

labview界面分隔和自定义窗口大小 的相关文章

  • GD32VF103之GPIO最小配置

    longan nano是Sipeed xff08 矽速科技 xff09 推出的开发板 xff0c 使用兆易创新的gd32vf103cbt6芯片 xff0c 该芯片是基于芯来科技的Nuclei Bumblebee处理器的32位通用微控制器 x
  • Linux控制I2C/SMBus设备

    平台 xff1a 树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1 2 I2C是Philips开发的一种两线通信协议 xff0c 常用于一些对速度要求不高的小型器件上 SMBus是系统管理总线 xff0c 基
  • ArduPilot/APM源码学习笔记(一)

    最近开始学习ArduPilot APM飞控的源码 xff0c 源码托管在github上 源码链接 xff1a https github com diydrones ardupilot 飞控主页 xff1a http ardupilot co
  • GRUB2引导修复

    本来是想把GRUB2装到U盘 xff0c 却不小心把电脑的GRUB搞坏了 原因可能是我执行命令grub install时没有加任何参数 xff0c 由于不知道没有参数怎么执行 xff0c 我赶紧ctrl 43 c终止了安装 xff0c 最后
  • ardupilot的libraries之PID

    在源码的libraries中 xff0c 有两个关于PID的源文件文件夹 xff0c 一个叫AC PID xff0c 另一个是PID AC PID中又细分为AC HELI PID AC P和AC PID xff0c 这里我们只讨论AC PI
  • stm32串口HAL库的DMA发送问题

    本文使用stm32f411ret的串口1的DMA方式发送数据 xff0c 刚开始调试的时候发现串口只能发送一次数据 xff0c 之后就把系统hang住了 通过网上搜资料和不断尝试 xff0c 发现问题是中断回调函数没有写的原因 使用HAL库
  • stm32的HAL库i2c从机实现

    stm32的i2c默认就是slave模式 xff0c 本文基于HAL库实现中断方式的接收和发送 xff0c 首先是初始化gpio和i2c xff0c 代码如下 xff1a I2C HandleTypeDef I2cHandle void H
  • openBLT-系统结构及框架

    openBLT 系统结构及框架 前言1 框架1 1设备层1 2中间件1 2 1 COM1 2 2 BACKDOOR1 2 3 FILE 1 3应用层 前言 openBLT 是开源的小型嵌入式系统bootloader xff0c 目前支持ST
  • 磁力计的基本工作原理

    http www dzsc com data html 2010 11 29 87454 html ST集成传感器方案实现电子罗盘功能
  • Ubuntu(ROS+雷达)修改udev/rules/更改ttyUSB 使端口绑定

    前提 xff1a 1 Linux xff08 Ubuntu xff09 系统 xff0c 本版本为Ubuntu16 04 2 确定USB口可以使用 xff08 拔插U盘看看有没有弹出文件夹窗口 xff09 参考博客 xff1a https
  • CAN总线 标准帧/扩展帧滤波器设置

    在CAN协议里 xff0c 报文的标识符不代表节点的地址 xff0c 而是跟报文的内容相关的 因此 xff0c 发送者以广播的形式把报文发送给所有的接收者 节点在接收报文时 根据标识符 CAN ID 的值决定软件是否需要该报文 xff1b
  • http之 半包 粘包

    短连接 xff1a 连接 gt 传输数据 gt 关闭连接 HTTP是无状态的 xff0c 浏览器和服务器每进行一次HTTP操作 xff0c 就建立一次连接 xff0c 但任务结束就中断连接 也可以这样说 xff1a 短连接是指SOCKET连
  • Ardupilot飞控编译环境搭建

    构建环境 Ardupilot具有完整的开发库 xff0c 其编译代码可以直接下载 xff0c 在Windows上 xff0c 可以利用Cygwin编译器来进行下载并编译 xff0c 对此怒飞垂云的教程中有详细的下载方法 xff1a 飞控固件
  • 转:跳点搜索算法JPS及其优化(万字长文)

    欢迎关注作者git博客 1 引言 寻路算法用途众多 xff0c 例如在游戏和地图中 A 算法已经众所周知 xff0c 对于其优化也是层出不穷 xff0c 然而性能并没有取得突破性进展 本文介绍JPS的效率 多线程 内存 路径优化算法 为了测
  • socket编程——sockaddr_in结构体操作

    socket编程 sockaddr in结构体操作 sockaddr结构体 sockaddr的缺陷 xff1a struct sockaddr 是一个通用地址结构 xff0c 这是为了统一地址结构的表示方法 xff0c 统一接口函数 xff
  • Resource not found: rgbd_launch 解决方案

    Resource not found rgbd launch 解决方案 操作环境问题描述解决方案 操作环境 虚拟机 xff1a VMware 系统版本 xff1a Ubuntu 18 04 ROS版本 xff1a Melodic 摄像头 x
  • ModuleNotFoundError: No module named ‘cv2‘

    ModuleNotFoundError No module named 39 cv2 39 问题描述模块安装模块安装问题解决 问题描述 系统环境 xff1a ubuntu 18 04 操作内容 xff1a 配置DenseFusion运行环境
  • 系统辨识理论及MATLAB仿真——学习笔记(1)

    系统辨识理论及MATLAB仿真学习笔记 xff08 1 xff09 前言目录第1章 绪论1 1 建立数学模型的基本方法1 2 系统辨识的定义1 3 系统辨识的研究目的1 4 数学模型的分类1 5 几种常见的数学模型的数学表示1 6 系统辨识
  • 甚小孔径终端(VSAT)卫星网络拓扑结构及接入方式

    甚小孔径终端 xff08 VSAT xff09 卫星网络拓扑结构及接入方式 文章目录 甚小孔径终端 xff08 VSAT xff09 卫星网络拓扑结构及接入方式前言一 VSAT网络类型1 星型拓扑结构网络2 网状拓扑结构网络 二 VSAT网
  • Ubuntu18.04 界面美化(mac风格)

    Ubuntu mac 主题美化 测试系统 xff1a Ubuntu 18 04 测试时间 xff1a 2022年2月26日 先前准备 安装主题的工具 xff1a GNOME Tweaks sudo apt get update sudo a

随机推荐