首页 > 解决方案 > 有没有办法将多个变量、结构、小部件数据等传递给 Octave 中的回调函数?

问题描述

我试图传递数据(主要是结构、来自 gui 元素的信息等),但我在这样做时遇到了一些麻烦。这是我的例子:

  function []=myGUI()
     fig=figure('position',[200 200 200 200]);
     SecondS.edit1=uicontrol('style','edit','position',[25 60 80 20],'parent',fig,'string','enter 2nd');
     SecondS.edit2=uicontrol('style','edit','position',[25 80 80 20],'parent',fig,'string','enter 1st');
     SecondS.text=uicontrol('string','no result yet','style','text','position',[20 10 80 20],'parent',fig);
     S.button=uicontrol('string','Giris','style','push','position',[30 30 40 20],'parent',fig,'Callback',{@myCallback,SecondS});
 function []=myCallback(varargin)
    S=varargin{3};
    first=get(S.edit1,'string')
    second=get(S.edit2,'string')
    if isequal(first,'enes')&isequal(second,'gormez')
      set(S.text,'string','both names match');
    end

在上面的示例中,我可以传递结构“SecondS”,并且可以使用“GCBO”访问触发器小部件的信息。但是,如果我有另一个变量、不在 SecondS 中的小部件或完全不同的结构,我将无法传递数据。我怎样才能做到这一点而不必触摸我已经通过的信息。

非常感谢您的任何关注。

标签: callbackoctave

解决方案


在搜索了几个小时后,我在下面找到了我的问题的解决方案。

function myGUI()
    fig=figure('position',[200 200 200 200]);
    SecondS.edit1=uicontrol('style','edit','position',[25 60 80 20],'parent',fig,'string','enter 1st');
    SecondS.edit2=uicontrol('style','edit','position',[25 80 80 20],'parent',fig,'string','enter 2nd');
    SecondS.text=uicontrol('string','no result yet','style','text','position',[20 10 80 20],'parent',fig);
    SecondS.button=uicontrol('string','Giris','style','push','position',[30 30 40 20],'parent',fig,'Callback',@myCallback);
    guidata(fig,SecondS);
endfunction
function myCallback(hObject,eventdata)
    S=guidata(hObject)
    first=get(S.edit1,'string')
    second=get(S.edit2,'string')
    if isequal(first,'enes')&&isequal(second,'gormez')
        set(S.text,'string','both names match');
    end
endfunction

推荐阅读