在使用指南创建的 Matlab GUI 中更改网格

Changing grid in Matlab GUI created with guide

我正在使用 Matlab 指南创建用户界面。一切正常,网格似乎根据机器而改变。网格设置为 10 像素,对齐网格已打开。所有单位都设置为字符。为什么网格发生变化而控件不再位于网格上?

根据文档,MATLAB 定义 'characters' 单位如下:

These units are based on the default uicontrol font of the graphics root object:

  • Character width = width of the letter x.

  • Character height = distance between the baselines of two lines of text.

To access the default uicontrol font, use get(groot,'defaultuicontrolFontName') or set(groot,'defaultuicontrolFontName').

此默认字体可能因系统而异,不应用于布置您的 GUI(我不知道为什么 MATLAB 将它用作默认字体这么久)。我建议使用 'pixels''normalized' 单位来控制 GUI 的布局。

为了说明差异,请尝试以下示例:

h1.f = figure('Name', get(groot, 'defaultuicontrolFontName'), ...
              'NumberTitle', 'off', 'ToolBar', 'none' ...
              );
h1.b1 = uicontrol('Parent', h1.f, 'Style', 'pushbutton', ...
                  'Units', 'characters', 'Position', [35 15 45 10 ], ...
                  'String', 'Button A' ...
                  );
h1.b2 = uicontrol('Parent', h1.f, 'Style', 'pushbutton', ...
                  'Units', 'characters', 'Position', [35 5 45 10 ], ...
                  'String', 'Button B' ...
                  );

oldfont = get(groot, 'defaultuicontrolFontName');
set(groot, 'defaultuicontrolFontName', 'Comic Sans MS');

h2.f = figure('Name', get(groot, 'defaultuicontrolFontName'), ...
              'NumberTitle', 'off', 'ToolBar', 'none' ...
              );
h2.b1 = uicontrol('Parent', h2.f, 'Style', 'pushbutton', ...
                  'Units', 'characters', 'Position', [35 15 45 10 ], ...
                  'String', 'Button A' ...
                  );
h2.b2 = uicontrol('Parent', h2.f, 'Style', 'pushbutton', ...
                  'Units', 'characters', 'Position', [35 5 45 10 ], ...
                  'String', 'Button B' ...
                  );

set(groot, 'defaultuicontrolFontName', oldfont);

产生 2 个数字 windows:

请注意,两个图都是使用完全相同的代码生成的,但它们的布局却截然不同。