回调函数需要至少 2 个输入 - 对象和事件。您收到错误消息是因为您只提供了一个输入变量 app 并且您正在使用它。当回调函数被调用时,Matlab 传递了 2 个额外的输入变量,所以你的函数需要有 3 个输入变量。我会尝试将您的功能更改为类似的功能
function []=set_time();
function [] = set_time_callback(obj, evt ,app)
fprintf('\nhello world!')
end
app.UIFigure=uifigure;
app.SetButton = uibutton(app.UIFigure,'push','Position',[23 29 106 22],'ButtonPushedFcn', @(obj, event) set_time_callback(obj, event, app));
end
将对象传递给函数的另一种方法是
app.SetButton = uibutton(app.UIFigure,'push','Position',[23 29 106 22],'ButtonPushedFcn', {@set_time_callback, app});
现在在函数 set_time_callback 中,您没有使用您试图传递的变量 app。除非您计划添加一些功能,否则您可以摆脱此变量。其他两个变量也没有使用。您可以在函数声明中使用~ 符号代替这些变量,但您仍然需要为 2 个变量保留空间。
function []=set_time();
function [] = set_time_callback(~, ~)
fprintf('\nhello world!')
end
app.UIFigure=uifigure;
app.SetButton = uibutton(app.UIFigure,'push','Position',[23 29 106 22],'ButtonPushedFcn', @set_time_callback);
end
使用函数句柄你可以在你的回调函数声明中去掉这两个变量
function []=set_time();
function [] = set_time_callback()
fprintf('\nhello world!')
end
app.UIFigure=uifigure;
app.SetButton = uibutton(app.UIFigure,'push','Position',[23 29 106 22],'ButtonPushedFcn', @(obj, event) set_time_callback());
end
在这种情况下,如果您仍想在函数内部传递变量,请使用 this
function []=set_time();
function [] = set_time_callback(varName)
fprintf('\nhello world!')
end
app.UIFigure=uifigure;
app.SetButton = uibutton(app.UIFigure,'push','Position',[23 29 106 22],'ButtonPushedFcn', @(obj, event) set_time_callback(app));
end