单击按钮关闭 uialert 图

Close uialert figure by button click

基于一个 MATLAB 示例,我添加了一个 close 命令,以便在按下 OK 按钮后关闭 uifigure。但是,在当前状态下,图形会自动关闭,而不是单击按钮。我怎样才能改变下面的图形以在点击时关闭?

代码:

fig = uifigure;
message = {'Fire hazard!','Consider reducing temperature.'};
uialert(fig,message,'Warning',...
'Icon','warning');
close(fig)

您应该在 uialert 中使用回调:

fig = uifigure;
message = {'Fire hazard!','Consider reducing temperature.'};
uialert(fig, message, 'Warning', 'Icon', 'warning', ...
        'CloseFcn', @(~, ~)close(fig));  % This will be executed after Ok is pressed

语法@是定义匿名函数的Matlab方式(Matlab调用这些函数句柄,其他语言通常称这些为 lambda)。它允许将函数作为参数传递给其他函数。如果你的匿名函数需要接收参数,可以使用语法@(p1, p2, p3)

对于 uifigures 的回调,回调总是需要两个参数:figeventfig是事件发生的图形,event是描述事件的结构体。在上面的例子中,由于您要做的就是关闭图窗(并且您已经知道要关闭哪个图窗),因此您可以忽略这两个参数。 Matlab 中的语法告诉您正在接收一个您故意忽略的参数,方法是在参数的位置使用波浪号 (~)。这实际上可以在任何地方使用,包括在普通函数的定义中或在解包 return 值时。例如:

[U,~,V] = svd(A)

表示您对 SVD 的奇异值不感兴趣,只对左右奇异向量感兴趣。

您可以在 Matlab documentation.

中阅读有关函数句柄的更多信息