GUI等待用户输入并在时间用完时执行某些操作

时间:2016-10-04 22:55:08

标签: matlab

我正在使用一个接受用户输入的脚本。我希望用户在4秒内回答输入,否则代码将执行某些操作(现在不使用GUI)。到目前为止我所做的是启动tic并提示输入testInput = input('Enter the number: ');同时提示已打开(等待输入)我正在检查时间是否已经过时:

elapsed_time = toc; if elapsed_time > 4 %do something end

问题: 根据我所学到的,没有办法以编程方式在MATLAB中终止正在运行的命令,甚至在提示打开时让代码执行某些操作。因此,我无法检查用户输入内容之前是否已经过了 4秒。我已经读过(here)这可能通过使用GUI来解决。我虽然不知道如何实现这一点,因为我是全新的。

那么,用GUI可以实现吗?因为命令窗口不是。

我真的很高兴看到像这样简单的东西看起来像一个GUI(只是一个非常简单的东西,一个带有输入框的窗口):

%Start a time ticker
tic;

testInput = input('Enter the number: ');

elapsed_time = toc;

 if elapsed_time > 4
    %do something
 end

1 个答案:

答案 0 :(得分:1)

以下是自定义GUI的一个小示例,用户应在达到最长时间之前输入一个数字。请阅读一些关于callbackshandlesfigure optionsuicontrol的内容,以便更好地了解它。

请注意,您可能需要对输入字符串执行更多错误处理(检查该编号是否有效)

function EnterNumber()

% Create figure
inDlg = figure('NumberTitle','off','MenuBar','none','ToolBar','none');

% Create timer, set it to run TimerFcn after 4 s
maxTime = 4;
tH = timer('TimerFcn', {@closeFig inDlg}, 'StartDelay', maxTime);

% Create text and input box for number in figure
uicontrol(inDlg,...
    'Style','Text','FontSize',14, ...
    'String',sprintf('Please enter a number within %d seconds:', maxTime),...
    'Units','Normalized','Position',[0.1 0.6 0.8 0.2]);
editBox = uicontrol(inDlg,...
    'Style','Edit','Units','Normalized','Position',[0.1 0.5 0.8 0.2], ...
    'FontSize',14,'Callback',@returnEditValue);

% Start timer
start(tH);

% Set focus on the edit box so a number could be entered instantly
uicontrol(editBox)

% Wait for figure to be closed (in any way)
waitfor(inDlg)
fprintf('Moving on ...\n');


% Callback function to save number
function returnEditValue(hObject,~)
% Get the number
number = str2double(get(hObject,'String'));
% Example of how to display the number
fprintf('The entered number is %d\n', number);
% Example of saving the number to workspace
assignin('base','number', number); 
% Close figure
close(get(hObject,'Parent')); 


% Calback function for timer timeout
function closeFig(~,~,figH)
% If figure exist, close it
if ishandle(figH)
    close(figH)
    fprintf('Too slow!\n')
end