我有一个脚本,创建多个配置:
% 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
我希望第二个配置是当前配置,所以我用第三个命令设置它。然而,当我使用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
有什么问题吗?
对于uifigure
,属性HandleVisibility
-对象句柄的可见性设置为'off',表示该属性为只读。
此属性提供有关图对象在其父对象的子对象列表中的可见性的信息。因为这个属性值总是被设置为"off",所以Figure对象在父对象的子对象列表中是不可见的,并且通过搜索对象层次结构或查询对象属性来访问对象的函数也不会返回它。这些功能包括gcf
、get
、findobj
、clf
、close
。
对象是有效的,即使他们的HandleVisibility属性被设置为off。如果你可以访问一个对象,你可以设置和获取它的属性,并把它传递给任何对对象进行操作的函数。但是,gcf
不能返回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
创建的图形都没有"handlevisibility";属性设置为"开"。在我的代码中,我稍微更改了图形名称,以便如果您运行gcf
,您将看到它正在创建一个名为figure 1的新图形,而不是切换到该代码创建的第一个图形。
如果您希望gcf
工作并看到图2,您可以在创建图时打开handlevisibility。用下面的代码替换上面用于创建图2的行:
fig2 = uifigure('Name', 'MyFig 2', 'handlevisibility', 'on');