【问题标题】:Argument passing from a GUI从 GUI 传递的参数
【发布时间】:2012-09-11 10:15:18
【问题描述】:

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

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

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

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

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

state = get(hObject,'Value')

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

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

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

【问题讨论】:

    标签: matlab matlab-guide


    【解决方案1】:

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

    听起来你已经解决了这个问题 - 所以你可能有这样的功能:

    function go_Callback(hObject, eventdata, handles)
    

    当您按下“开始”按钮时执行。如果没有,请从 GUIDE 创建它,方法是右键单击“Go”按钮并选择“View Callbacks”->“Callback”。

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

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

    同样,对于复选框:

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

    【讨论】:

      【解决方案2】:

      我没有使用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        • 1970-01-01
        相关资源
        最近更新 更多