如何在 MATLAB GUIDE 中制作倒数计时器?
How to make a countdown timer in MATLAB GUIDE?
我正在尝试在 GUIDE 中制作一个从 20 倒数到 0(秒)的计时器。在此期间,用户将执行一个简单的操作(单击组按钮中的单选按钮),并在 20 秒结束时显示一条消息(取决于用户单击的按钮)。
我环顾四周,但似乎没有用于 GUIDE 的计时器对象(他们为什么不制作一个,因为它非常有用??)。但是我试着做了一个,下面是结果,它不起作用。
我在 MyGUI_OpeningFcn
:
中初始化了 setappdata
% Initialize setappdata
timeout = 20;
setappdata(handles.figure1,'timeout', timeout);
Next_calculation
是单选按钮,timerBox
是静态文本。
function Next_calculation_Callback(hObject, eventdata, handles)
[..]
timeout = getappdata(handles.figure1,'timeout');
t = timer('Period', 1.0,... % 1 second
'StartFcn', set(handles.timerBox,'String',num2str(timeout)), ...
'ExecutionMode', 'fixedRate', ... % Starts immediately after the timer callback function is added to the MATLAB execution queue
'TasksToExecute', timeout, ... % Indicates the number of times the timer object is to execute the TimerFcn callback
'TimerFcn', @my_timer ... % callback to function
);
start(t)
一旦计时器开始,它会调用 TimerFcn
,然后调用 my_timer
。我应该将句柄传递给 my_timer
,但我不知道具体怎么做。
function my_timer(hObject, eventdata)
% I think I'm supposed to pass (hObject, eventdata) to my_timer
% handles should be getting the current figure from hObject
handles = guidata( ancestor(hObject, 'figure1') );
timeout = getappdata(handles.figure1,'timeout');
t_left = timeout - 1.0;
% show the updated time
set(handles.timerBox,'String',num2str(t_left));
% update 'timeout'
setappdata(handles.figure1,'timeout',t_left)
您需要使用自定义匿名函数 TimerFcn
将必要的数据传递给您的计时器回调
set(t, 'TimerFcn', @(s,e)my_timer(hObject, handles))
然后您可以将 my_timer
回调定义为
function my_timer(hObject, handles)
% Do stuff with handles
end
我正在尝试在 GUIDE 中制作一个从 20 倒数到 0(秒)的计时器。在此期间,用户将执行一个简单的操作(单击组按钮中的单选按钮),并在 20 秒结束时显示一条消息(取决于用户单击的按钮)。
我环顾四周,但似乎没有用于 GUIDE 的计时器对象(他们为什么不制作一个,因为它非常有用??)。但是我试着做了一个,下面是结果,它不起作用。
我在 MyGUI_OpeningFcn
:
setappdata
% Initialize setappdata
timeout = 20;
setappdata(handles.figure1,'timeout', timeout);
Next_calculation
是单选按钮,timerBox
是静态文本。
function Next_calculation_Callback(hObject, eventdata, handles)
[..]
timeout = getappdata(handles.figure1,'timeout');
t = timer('Period', 1.0,... % 1 second
'StartFcn', set(handles.timerBox,'String',num2str(timeout)), ...
'ExecutionMode', 'fixedRate', ... % Starts immediately after the timer callback function is added to the MATLAB execution queue
'TasksToExecute', timeout, ... % Indicates the number of times the timer object is to execute the TimerFcn callback
'TimerFcn', @my_timer ... % callback to function
);
start(t)
一旦计时器开始,它会调用 TimerFcn
,然后调用 my_timer
。我应该将句柄传递给 my_timer
,但我不知道具体怎么做。
function my_timer(hObject, eventdata)
% I think I'm supposed to pass (hObject, eventdata) to my_timer
% handles should be getting the current figure from hObject
handles = guidata( ancestor(hObject, 'figure1') );
timeout = getappdata(handles.figure1,'timeout');
t_left = timeout - 1.0;
% show the updated time
set(handles.timerBox,'String',num2str(t_left));
% update 'timeout'
setappdata(handles.figure1,'timeout',t_left)
您需要使用自定义匿名函数 TimerFcn
将必要的数据传递给您的计时器回调
set(t, 'TimerFcn', @(s,e)my_timer(hObject, handles))
然后您可以将 my_timer
回调定义为
function my_timer(hObject, handles)
% Do stuff with handles
end