MatlabGUI中两个回调函数之间的传递值

MatlabGUI中两个回调函数之间的传递值,matlab,matlab-figure,matlab-guide,Matlab,Matlab Figure,Matlab Guide,我有两个按钮。若我按下一个infinte循环将运行,若我按下另一个循环必须中断。请提供一些代码方面的帮助 提前感谢您使用的是指南还是“编程”gui?下面是编程gui的一个小示例;类似的概念可能适用于指南。(我个人喜欢编程gui路线增加的灵活性,加上我总是不可避免地破坏我创建的任何指南gui…) 无论如何,在本例中需要注意以下几点: 使用gui的figure handle UserData字段存储“全局”信息。这是一种在回调之间传递数据的方法 需要“无限”循环中的pause语句,以便处理来自cb_

我有两个按钮。若我按下一个infinte循环将运行,若我按下另一个循环必须中断。请提供一些代码方面的帮助

提前感谢

您使用的是指南还是“编程”gui?下面是编程gui的一个小示例;类似的概念可能适用于指南。(我个人喜欢编程gui路线增加的灵活性,加上我总是不可避免地破坏我创建的任何指南gui…)

无论如何,在本例中需要注意以下几点:

  • 使用gui的figure handle UserData字段存储“全局”信息。这是一种在回调之间传递数据的方法
  • 需要“无限”循环中的pause语句,以便处理来自cb_按钮2的中断。From:“如果正在执行回调的对象的可中断属性为on,则可以中断回调。但是,只有当回调或其触发的函数调用drawnow、figure、getframe、pause或waitfor时,回调才会中断。”


  • +1对于显示的消息:-)好的,对于回答Too而不是pause(),您可以将按钮的回调设置为可中断。它只是uicontrol的另一个属性,所以您可以在创建它时设置它。
    function my_gui(varargin)
    
        mainfig = figure;
    
        out.h_button1 = uicontrol(mainfig,...
                                    'Style','pushbutton',...
                                    'Units','Normalized',...
                                    'Position',[0,0.5,1,0.5],...
                                    'String','Button 1',...
                                    'Callback',@cb_button1);
    
        out.h_button2 = uicontrol(mainfig,...
                                    'Style','pushbutton',...
                                    'Units','Normalized',...
                                    'Position',[0,0,1,0.5],...
                                    'String','Button 2',...
                                    'Callback',@cb_button2);
    
        out.button2_flag = 0; %flag indicating whether button 2 has been pressed yet
    
        set(mainfig,'UserData',out);%store "global" data in mainfig's UserData (for use by callbacks)          
    
    
    function cb_button1(varargin)
    
        out = get(gcbf,'UserData'); %gcbf: handle of calling object's figure
    
        while ~out.button2_flag
            disp('Aaaahhh, infinite loop! Quick press Button 2!');
            out = get(gcbf,'UserData'); %reload "global" data
            pause(0.1); %need this so this callback may be interrupted by cb_button2
        end
    
        disp('Thanks!  I thought that would never end!');
    
    
    function cb_button2(varargin)
        out = get(gcbf,'UserData'); %gcbf: handle of calling object's figure
        out.button2_flag = 1;
        set(gcbf,'UserData',out); %save changes to "global" data