当我按下开始按钮时,我希望我的代码在开始按钮中连续运行,当我按下停止时,我希望我的时间和值在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;
答案 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
请注意:在循环的每次迭代之间,您可能需要一个小暂停(我使用了第二次暂停)。
答案 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))。