当我按下开始按钮时,我希望我的代码在开始按钮中连续运行,当我按下停止时,我希望停止运行

时间:2016-08-28 10:08:18

标签: matlab user-interface matlab-guide

当我按下开始按钮时,我希望我的代码在开始按钮中连续运行,当我按下停止时,我希望我的时间和值在GUI屏幕上不断变化的方式告诉我一个方法吗?这是我写的:

% --- Executes on button press in start.
function start_Callback(hObject, eventdata, handles)
% hObject    handle to start (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global loop;
loop=1;
while loop==1
voltage1=50;
curr=1;
pf=0.8;
power=voltage1*curr*pf;
y=sprintf('Voltage: %d V, Current: %.2f A, Power Factor: %.2f, Power: %.3f W',voltage1,curr,pf,power);
set(handles.voltage,'String',y);
t=datestr(clock);
set(handles.date,'String',t);
rate=66.5;
z=sprintf('Rate: %.2f Rs',rate);
set(handles.rate,'String',z);
end

% --- Executes on button press in stop.
function stop_Callback(hObject, eventdata, handles)
% hObject    handle to stop (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
loop=0;

2 个答案:

答案 0 :(得分:0)

以下示例演示了开始和停止按钮 我使用以下代码:http://www.mathworks.com/help/matlab/creating_guis/about-the-simple-programmatic-gui-example.html示例,在不使用指南的情况下创建GUI 不使用指南的原因是您无需使用由指南创建的 fig 文件即可执行该示例。
继续使用指南 - 它比通过代码创建GUI简单得多。

我没有使用全局变量,而是保存了'循环' handles.h_figure.UserData中的状态(它保存在GUI对象的字段中)。

以下示例,(仅)更改开始按钮颜色,直到按停止:

function simple_gui2
    % Create and then hide the GUI as it is being constructed.
    h_figure = figure('Visible','off','Position',[360,500,450,285]);

    % Initialize the GUI.
    h_figure.Units = 'normalized';

    movegui(h_figure, 'center')

    % Make the GUI visible.
    h_figure.Visible = 'on';

    h_start = uicontrol('Style','pushbutton',...
                        'String','Start','Position',[100,150,250,80],...
                        'Callback',@startbutton_Callback);

    h_stop = uicontrol('Style','pushbutton',...
                       'String','Stop','Position',[100,50,250,80],...
                       'Callback',@stopbutton_Callback);

    handles.h_start = h_start;
    handles.h_stop = h_stop;

    % Start Push button callback.
    function startbutton_Callback(source, eventdata) 
        %global loop;
        %loop = 1;

        %Instead of using global variable, save loop in UserData element of figure.
        loop = 1;
        handles.h_figure.UserData = loop;

        while loop == 1
            %Set start button color to random color
            set(handles.h_start, 'BackgroundColor', rand(1, 3));
            pause(1);
            loop = handles.h_figure.UserData;
        end        
    end


    % Stop Push button callback.
    function stopbutton_Callback(source, eventdata) 
        %global loop;
        loop = 0;
        handles.h_figure.UserData = loop;

        %Set start button color to white color
        set(handles.h_start, 'BackgroundColor', [1, 1, 1]);
    end
end

请注意:在循环的每次迭代之间,您可能需要一个小暂停(我使用了第二次暂停)。

enter image description here

答案 1 :(得分:0)

对于此任务,您可以使用“停止”按钮的“UserData”属性。 按下“开始”按钮时,将“停止”按钮的“用户数据”设置为0,而将“停止”按钮设置为“循环”,然后选按下“停止”按钮时,将“UserData”设置为1,这将在循环时中断。 这是一个例子:

function start_Callback(hObject, eventdata, handles)
set(handles.stop,'UserData',0);
set(handles.start,'Enable', 'off');
set(handles.stop,'Enable', 'on');

while (get(handles.stop,'UserData') == 0)
    % Your code
    pause(1)
end

function stop_Callback(hObject, eventdata, handles)
set(handles.stop,'UserData',1);
set(handles.start,'Enable', 'on');
set(handles.stop,'Enable', 'off');

在这个例子中,我按下启动按钮时按下启用按钮,然后按下停止按钮时启用按钮(对于停止按钮也是如此),我认为在视图UI设计中这是更好的选择。 请注意,暂停值可以更短(例如暂停(0.00001))。