是否可以将多个变量,结构,小部件数据等传递给Octave中的回调函数?

问题描述 投票:1回答:2

我试图传递数据(主要是结构,来自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或完全不同的结构中的变量,则无法传递数据。我如何做到这一点而不必触摸我已经通过的信息。

非常感谢您的关注。

callback octave
2个回答
1
投票

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

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

0
投票

这里是一个例子。请仔细比较您的代码,看看有什么变化。

function myGUI()
    fig1 = figure( 'position', [200 200 200 120], 'name', 'Main User Interface' );
    SecondS.edit1 = uicontrol( fig1, 'style', 'edit', 'position', [25 90 160 20] , 'string', 'enter 1nd', 'userdata', 'edit1');
    SecondS.edit2 = uicontrol( fig1, 'style', 'edit', 'position', [25 60 160 20] , 'string', 'enter 2nd', 'userdata', 'edit2');
    SecondS.text  = uicontrol( fig1, 'style', 'text', 'position', [25 10 160 20], 'string', 'no result yet', 'userdata', 'textoutput' );

    fig2 = figure( 'position', [500, 300, 200, 100], 'name', 'The Button!' );
    S.button = uicontrol( fig2, 'style', 'pushbutton', 'position', [50 25 100 50], 'string', 'Giris', 'Callback', @myCallback );
 endfunction

 function myCallback( Hndl, Evnt )
    fig1       = findobj( 'name', 'Main User Interface' );
    edit1      = findobj( fig1, 'userdata', 'edit1' );
    edit2      = findobj( fig1, 'userdata', 'edit2' );
    textoutput = findobj( fig1, 'userdata', 'textoutput' );

    first  = get( edit1, 'string' );
    second = get( edit2, 'string' );

    if strcmp( first, 'enes' ) && strcmp( second, 'gormez' )
      set( textoutput, 'string', 'both names match' );
    endif
 endfunction
© www.soinside.com 2019 - 2024. All rights reserved.