【问题标题】:OpeningFcn Matlab GUIDE - initialising handles and calling function in correct orderOpenFcn Matlab GUIDE - 以正确的顺序初始化句柄和调用函数
【发布时间】:2017-10-18 03:15:14
【问题描述】:

我正在开发一个项目,我使用 Matlab GUI 在按下按钮时实时切换音频输出。我有一个 Matlab GUIDE 文件和一个使用音频系统工具箱的函数来监听 GUI 动作。

GUIDE 文件有一个 OpeningFcn,我在其中声明了各种句柄,然后 GUI 才可见。在 OpeningFcn 中,我声明了“handles.AttenuationFactor”。它的想法是,当用户稍后按下 GUI 中的按钮时,handles.AttenuationFactor 会相应地发生变化。

让单独的函数监听 GUI 操作没有问题。我只是从正确的 GUI 对象中检索 GUI 句柄:

gui = findobj('Tag','GUI’);

if ~isempty(gui)
   % get handles
   gdata = guidata(gui);
   AttenuationFactor = gdata.AttenuationFactor;
end

%% Perform calculations with attenuation factor

这里是泡菜:我什么时候调用监听 GUI 的函数?

我无法在 OpeningFcn 中调用它,因为尚未调用最后一行代码 guidata(hObject,handles) 并且从“GUI”检索信息时“handles.attenuationFactor”因此不存在!

我已经尝试将函数调用放在按钮按下的回调函数中,但这意味着创建的代码应该只执行一次以在每次按下按钮时进行评估。

有没有办法在函数调用之前强制更新句柄?

【问题讨论】:

    标签: matlab real-time matlab-guide handles


    【解决方案1】:

    在开头,你需要设置一个基值。可能调用全局变量并设置值。相应地更新句柄。

    您应该使用 matlab 中的 set/get 函数来处理句柄。设置handles.attenuationFactor是什么意思?

    如果用户改变了衰减因子的值,一旦它改变了,在按钮的回调中,你可以很简单的获取这个值。 以get(handles.attenuationFactor,'Value') 为例。

    【讨论】:

    • 感谢您的回答。我在我的另一个函数中创建了一个名为衰减因子的变量并将其设置为 0。然后我使用“isfield(gdata,'attenuationFactor')”来检查句柄以及它是否已被初始化,以便程序不会崩溃尝试找到一个不存在的句柄。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 2021-06-12
    相关资源
    最近更新 更多