Сброс таймера в Matlab GUI после нажатия кнопки - PullRequest
0 голосов
/ 04 октября 2019

Итак, я создал графический интерфейс с помощью AppDesigner, где он выглядит следующим образом:

enter image description here

И два белых прямоугольника являются фактическими элементами UITextArea в конструкторе приложений,Выше, когда приложение выполняется, таймер начинает обратный отсчет и показывает время на UITextArea. Код, который я использовал для таймера, выглядит следующим образом:

methods (Access = private)

    function countdown(app)
        while true
            try
                minute = 29;
                set(app.TextArea1, 'Value', num2str(minute));
                seconds = 0;
                set(app.TextArea2, 'Value', num2str(seconds));
                while minute > 0
                    seconds = 59;
                    while seconds > 0
                        set(app.TextArea2, 'Value', num2str(seconds));
                        pause(1);
                        seconds = seconds - 1;
                    end
                    minute = minute - 1;
                    set(app.TextArea1, 'Value', num2str(minute));
                end
            catch
                break;
            end
        end
    end

И так как я хочу, чтобы таймер начал тикать при запуске, я вызвал функцию при запуске:

function startupFcn(app)    
        app.countdown;
end

Однако,проблема, с которой я столкнулся сейчас, заключается в том, что у меня есть эта кнопка, после нажатия на нее я бы хотел, чтобы таймер вернулся к своему первоначальному значению и снова начал тикать вниз.

function ResetButtonPushed(app, event)
    app.countdown
    %other process executes here onwards.
    .
    .
end

Но проблема в том, что я хочу, чтобы другой процесс, который происходит после вызова app.countdown, продолжил работу, где в моем случае программа ожидает завершения app.countdown, прежде чем перейти к следующей строке. ,Есть ли обходной путь для этого?

1 Ответ

0 голосов
/ 04 октября 2019

Вы можете добавить свойство ResetFlag = 0. В вашем методе countdown вы должны добавить условие if и запустить процесс один раз.

properties (Access = private)
   ResetFlag = 0
end

function countdown(app)
   while true
   try
   if app.ResetFlag
      disp('My Proccess');
      app.ResetFlag = 0;
   end
...

Установите для флага значение 1 в функции обратного вызова ResetButton.

function ResetButtonPushed(app, event)
   app.ResetFlag = 1;
   app.countdown();
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...