如何在 Matlab 中使一个 uifigure 成为当前的一个

How to make a uifigure the current one in Matlab

我有一个创建多个 uifigures 的脚本:

% create fig1
fig1 = uifigure('Name', 'Figure 1');

% create fig2
fig2 = uifigure('Name', 'Figure 2');

% set fig2 as the current figure
set(0, 'currentfigure', fig2);

% get the current figure
gcf

我想让第二个uifigure成为当前的,所以我用第三个命令设置了它。但是,当我随后使用 gcf 获取当前数字时,它仍然是第一个。这是命令行的输出:

ans = 

  Figure (1) with properties:

      Number: 1
        Name: ''
       Color: [0.9400 0.9400 0.9400]
    Position: [514 371 560 420]
       Units: 'pixels'

  Show all properties

有什么问题?

for uifigure 属性 HandleVisibility — 对象句柄的可见性设置为 'off',意思是这个属性是只读的。

此 属性 提供有关 Figure 对象在其父级子级列表中的可见性的信息。由于此 属性 值始终设置为 'off',因此 Figure 对象在其父级的子级列表中不可见,并且不会被通过搜索对象层次结构访问对象的函数 return 编辑或查询对象属性。这些函数包括 gcfgetfindobjclfclose

对象有效,即使它们的 HandleVisibility 属性 设置为 'off'。如果你有权访问一个对象,你可以设置和获取它的属性,并将它传递给任何对对象进行操作的函数。但是,gcf 不能 return App Designer 图...

这段代码做你想做的,创建两个图形并将第二个图形放在最上面

% create fig1
fig1 = uifigure('Name', 'MyFig 1');

% create fig2
fig2 = uifigure('Name', 'MyFig 2');

% set fig2 as the current figure
drawnow
figure(fig2)

您会看到图 2 位于顶部,而不是图 1,您的原始代码就是这种情况。如果您调用 gcf,它会创建一个新图形,它也将被称为“图 1”,因为 uifigure 创建的图形中有 none 个具有“HandleVisibility”属性设置为“开”。在我的代码中,我稍微更改了图形名称,这样如果您 运行 gcf,您将看到它正在创建一个名为 Figure 1 的新图形,而不是切换到此代码创建的第一个图形。

如果您希望gcf工作并查看图 2,您可以在创建图时打开 HandleVisbility。用以下代码替换上面用于创建图 2 的行:

fig2 = uifigure('Name', 'MyFig 2', 'handlevisibility', 'on');