0

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

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

我遇到了 GUIDE,我用它来构建一个不错的 GUI。我设法获得了一个按钮来启动我的函数,但我正在努力将实际变量输入到文本框和复选框状态以传递给主函数。

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

作为一个基本示例,我正在使用一个复选框。我知道当我单击一个复选框时,函数 checkbox1_Callback(hObject, eventdata, handles) 会执行。我已修改此函数,使其返回一个变量“状态”,该变量在函数期间以下列方式设置:

state = get(hObject,'Value')

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

我曾希望我可以在单击“开始”按钮时调用 checkbox1_Callback 函数,但我不知道将哪些参数传递给回调。

显然我在这里遗漏了一些基本的东西,但是文档并没有让这变得容易!任何指针将不胜感激。

4

2 回答 2

1

You will probably only need one callback - on the "GO" button.

It sounds like you've already sorted this out - so you probably have a function like:

function go_Callback(hObject, eventdata, handles)

which gets executed when you press the "Go" button. If you don't have it, create it from GUIDE by right-clicking the "Go" button and selecting "View Callbacks"->"Callback".

From here, you can 'pull' the data from other GUI components. For example, if you have a text box called "threshold":

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

Similarly, for a checkbox:

checked = get(handles.my_checkbox, 'Value');
于 2012-09-11T10:39:35.050 回答
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
于 2012-09-11T11:01:04.550 回答