将焦点设置为uifigure窗口

时间:2017-05-31 00:05:53

标签: matlab matlab-app-designer

如何在焦点切换到不同的数字后将焦点设置为uifigure

对于uicontrol,可以将焦点设置在其子元素之一上。例如:

% create a new uicontrol text label
h = uicontrol('style','text','string','This is my figure');
% create a figure to switch the focus
figure;
% switch back
uicontrol(h)

但是,对于uifigure,采用类似的代码只会创建一个新的uifigure

您可以试试一些代码:

% create a new uifigure
h = uifigure('Name','This is my figure');
% create a new uilabel as a child of uifigure
lh = uilabel(h)
% create a figure to switch the focus
figure;
% this creates a new uifigure then switch back
uifigure(h)
% this creates an error as the first input argument must be a valid parent for uilabel
uilabel(lh)

赞赏任何想法,见解或贡献。

请注意,您的Matlab版本应至少为2016a,因为这是uifigure引入的时间。

1 个答案:

答案 0 :(得分:7)

这是The MathWorks在实际拥有任何功能之前发布新UI框架的奇怪策略的另一个受害者。当然,新框架显示了许多承诺,但它在功能方面仍然是lags far behind旧图形系统。

除了Rant之外,还有一个快速的解决方法,在R2017a中测试很好:切换uifigure的可见性,这使它脱颖而出。这是一个基本的例子:

function uifigurepop(uifigurehandle)
drawnow;
uifigurehandle.Visible = 'off';
uifigurehandle.Visible = 'on';
end

如果我们将其纳入示例代码:

% create a new uifigure
h = uifigure('Name','This is my figure');
% create a new uilabel as a child of uifigure
lh = uilabel(h)
% create a figure to switch the focus
figure;
% this creates a new uifigure then switch back
uifigure()
uifigurepop(h);

你的身材现在呈现在屏幕的最顶端。