我正在学习用 Octave 编写 GUI 应用程序。具有带有几个 GUI 控件(例如按钮)和附加回调函数的代码,该回调函数作为独立函数保存在单独的文件中(函数 hp53132_update_param_callback(obj))。
当我在直接放置在主 m 代码脚本中的 gui 元素中使用回调函数引用时,该函数被正确调用。 在下一步中,我想将 gui 元素对象包装到一个包装函数中,该函数将在 GUI 初始化时调用。 为此,我用下面的代码片段编写了一个函数 hp53132_gui_initialize(hfig, callback_function)。
function h = hp53132_gui_initialize(hfig, callback_function)
h.panel1 = uipanel('Parent',hfig, 'Units','normal','Position', [2/3 0 1/3 1]);
h.ch1_zin_radio_buttons = uibuttongroup('Parent',h.panel1, 'Position', [0 0.85 1/5 0.1]);
h.ch1_zin_radio_Z_50Ohm = uicontrol ...
("Parent",h.ch1_zin_radio_buttons, "style", "radiobutton",
"units", "normalized",
"string", "50Ohm",
"callback", @callback_function,
"value", 0,
"position", [0.1 0.4 0.9 0.2]);
% and so forth...
endfunction
但是,当我尝试在主脚本中将函数引用作为参数传递给它时
hfig = figure('Units', 'normal', 'Position', [0.1 0.1 .8 .9]); %not quite full screen
h=hp53132_gui_initialize(hfig,@hp53132_update_param_callback);
guidata(hfig,h); % set GUI custom data, pass it to gcf object for callback functions
当我按下按钮或更改某些 GUI 控件时,我收到以下错误消息。
callback_function = @hp53132_update_param_callback
>> error: invalid function handle, unable to find function for @callback_function
error: invalid function handle, unable to find function for @callback_function
回调函数引用似乎在某处丢失了。我试图将其定义为持久性,但这没有帮助。
这似乎更像是您的 MatLab/Octave 环境的问题。
运行您的代码不会产生任何错误(1个关于使用“
normal
”而不是“normalize
”用于您的单位的警告)但没有错误。
我会仔细检查您是否已将函数的位置包含在路径中,如果没有以编程方式(请参阅函数
addpath
)或手动使用文件浏览器将其添加到路径中。