从GUI传递的参数

时间:2012-09-11 10:15:19

标签: matlab matlab-guide

我有一个可以以各种不同方式运行的函数,具体取决于在代码顶部设置的42个常量的状态。到目前为止,如果我想在不同的条件下运行我的函数,我只需打开MATLAB代码并在代码的开头调整常量。

四十二个常数需要跟踪,我发现自己正在运行实验,某些开关意外地保持打开状态。显而易见的解决方案是构建一个GUI,我可以在一个地方直观地看到我的输入。 GUI只是一个参数设置窗口,底部有一个大的“Go”按钮,它接收输入(全部42个!)并将它们传递给我的主函数。

我遇到了GUIDE,我用它来构建一个漂亮的GUI。我设法得到一个按钮来启动我的功能,但是我很难将实际的变量输入到文本框中并复选框状态以传递给主函数。

我知道它与'回调'有关,但文档不清楚,似乎更关心构建GUI,其中变量调整当前窗口的内容。

作为一个基本的例子,我正在使用一个复选框。我知道当我单击一个复选框时,函数checkbox1_Callback(hObject,eventdata,handles)会执行。我修改了这个函数,以便它返回一个变量'state',它在函数中按以下方式设置:

state = get(hObject,'Value')

每当我单击复选框时,会弹出一条消息,说明状态已更改。当然,一旦发生这种情况,函数就会结束并且变量被破坏。似乎没有任何方法可以在其他地方接收变量。 .m代码不包含对checkbox1_Callback函数的调用,所以我不知道在哪里可以接收输入。

我原本希望在单击“Go”按钮时可以调用checkbox1_Callback函数,但我不知道要传递给回调的参数。

显然我在这里缺少一些基本的东西,但文档并没有让这一切变得简单!任何指针都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

您可能只需要一个回调 - 在“开始”按钮上。

听起来你已经把它排除了 - 所以你可能有这样的功能:

function go_Callback(hObject, eventdata, handles)

按下“开始”按钮时执行。如果您没有,请通过右键单击“开始”按钮并选择“查看回调” - >“回调”来创建GUIDE。

从这里,您可以“拉”其他GUI组件中的数据。例如,如果您有一个名为“threshold”的文本框:

threshold = get(handles.threshold, 'String');

同样,对于一个复选框:

checked = get(handles.my_checkbox, 'Value');

答案 1 :(得分:0)

我没有使用GUIDE,所以我不能马上回答你的问题。但是,我会考虑在普通的MATLAB函数中“手动”编程启动屏幕。然后,您可以在显示GUI的函数内声明所有ui组件。 GO按钮的回调被声明为本地函数,因此它可以访问所有ui控件。当按下GO时,您只需获取uicontrols的状态并运行您的功能。

function setup_screen

init_figure = 1;
h_fig =   figure(...
    'BackingStore', 'on',...
    'DoubleBuffer','on',...
    'Render', 'zbuffer',...
    'Name', 'TecMod - Process Manager',...
    'NumberTitle','off',...
    'MenuBar','none',...
    'DockControls', 'off',...
    'Toolbar','none',...
    'units', 'characters',...
    'Position',[10 10 30 20],...
    'Units','characters');

hp_config = uipanel(...
    'Title','Setup',...
    'units', 'characters',...
    'Position',[1 1 28 18]);

hu_info = uicontrol('parent', hp_config, 'style','pushbutton',...
    'units','characters',  ...
    'TooltipString', 'Run the function',...
    'tag', 'hu_info',...
    'String', 'GO',...
    'Position', [1 1 25 3],...
    'Callback', @buttonCallback);

hu_choice = uicontrol('parent', hp_config, 'Style','checkbox',...
        'units', 'characters',...
        'Position',[1 10 25 3],...
        'String', 'Checkbox1',...
        'Value', 1);

    function buttonCallback(src,evt)
        if src==hu_info
            display('event from GO button');
            % get ui controls states
            display(['checkbox state ' num2str(get(hu_choice, 'Value'))]);
            % call your function with chosen parameters
        end
    end
end