有一阵子没写过和GUI有关的推文了,前一阵子我学了点PyQt里面有界面的布局,就想着MATLAB中应该也有类似的功能,搜了一下还真有
。
HBox :水平布局
VBox:垂直布局
TabPanel:选项卡布局
Grid:网格布局
还有上面这几种的复合布局
如果能熟练使用这些个布局,那那些控件的Position属性的属性值就不用愁了
。
上面的HBox,VBox,TabPanel,Grid 这四种布局都在uiextras类里面。
Firstly,你要在matlab中点击“获取附加功能”,如下:
Then:
HBox
在matlab命令行中输入:
uiextras.HBox()
双击工作空间中的ans会出来一个属性检查器
根据它所提供这些,选择自己想要的属性, 下面举了一个例子,一般常用的也就这些吧,如下:
clear
clc
close all
f = figure('Name', 'xxxx', ...
'Toolbar', 'none', ...
'NumberTitle', 'off', ...
'Menubar', 'none', ...
'Units', 'pixels', ...
'Position', [600, 300, 500, 200]);
HBox = uiextras.HBox(); % 创建一个水平布局
HBox.Parent = f; % 水平布局的父对象
HBox.Padding = 20; % 水平布局距这个范围框距离上下左右的间隔为20
HBox.Spacing = 20; % 布局内每个控件之间的间隔(此处是水平方向的间隔)
HBox.Units = 'pixels'; % 整个布局的单位(用于调整布局的左下角坐标),如果不设置则为normalized
HBox.OuterPosition = [50, 20, 300, 100]; % 布局的左下角坐标及宽度
btn1 = uicontrol('Parent', HBox, 'Style', 'Pushbutton');
btn2 = uicontrol('Parent', HBox, 'Style', 'Pushbutton');
btn3 = uicontrol('Parent', HBox, 'Style', 'Pushbutton');
btn4 = uicontrol('Parent', HBox, 'Style', 'Pushbutton');
% 第一个控件宽20pix,剩下的三个控件按1:2:3分割剩下的宽度。
HBox.Widths = [20, -1, -2, -3];
结果:
我把那个 Units 和 OuterPosition 去掉结果如下:
因为它默认的Units是normalized,OuterPosition是 [0, 0, 1, 1],所以这个布局会铺满整个窗口。
VBox
用同样的方法,来看一下VBox都有哪些属性:
没有了Width,在VBox中是Heights了,因为在水平方向上布局看的是高度嘛!其他的和HBox都差不多,用法也一样。
下面的例子和上面的基本一样,就是改了下布局方式:
clear
clc
close all
f = figure('Name', 'xxxx', ...
'Toolbar', 'none', ...
'NumberTitle', 'off', ...
'Menubar', 'none', ...
'Units', 'pixels', ...
'Position', [600, 300, 500, 200]);
VBox = uiextras.VBox(); % 创建一个垂直布局
VBox.Parent = f; % 垂直布局的父对象
VBox.Padding = 5; % 垂直布局距这个范围框距离上下左右的间隔为20
VBox.Spacing = 5; % 布局内每个控件之间的间隔(此处是垂直方向的间隔)
VBox.Units = 'pixels'; % 整个布局的单位(用于调整