1 / 1 / 0
Регистрация: 01.10.2018
Сообщений: 15
1

Запуск таймера по нажатию кнопки в GUI

01.10.2018, 19:24. Показов 2535. Ответов 4

Доброго времени уважаемое сообщество!
Прошу помочь с таймером, который должен запускаться по нажатию кнопки pushSrart_Callback.
В данный момент после нажатия кнопки запуска, получаю ошибку:

Error while evaluating TimerFcn for timer 'timer-1'
Reference to non-existent field 'pushStart'.

Есть предположение, что для корректной работы не хватает каких то дополнительных не используемых аргументов в функции
checktime(obj, event, handles)

Вот и запутался с этими аргументами.
И не могу сообразить каких именно аргументов может не хватать в данном случае.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function OSHPK_OpeningFcn(hObject, eventdata, handles, varargin)
 
timers = timerfind; %найти таймеры
 
if ~isempty(timers) %если есть таймеры
    delete(timers); %удалить все таймеры
end
 
%Создадим таймер
handles.t = timer('TimerFcn',{@сhecktime, handles}, ...
                  'ExecutionMode', 'fixedRate',     ...
                  'Period', 1.0,                    ...                    
                  'UserData', 'NONE');
 
 
handles.output = hObject; 
guidata(hObject, handles);
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
function сhecktime(obj, event, handles)
 
filename = get(handles.editPath, 'String'); %получить путь файла 
fileInfo = dir(filename);                   %получить информацию о файле
 
oldTime  = get(obj, 'UserData');            %получить время
 
if ~strcmp(fileInfo.date, oldTime)          %если время изменилось
    process(handles);                       %запустить пользовательскую функцию на выполнение
end
 
set(obj,'UserData',fileInfo.date);                      %запомнить время
set(handles.pushStart,'String',['Stop ' datestr(now)]); %переписать время
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function pushSrart_Callback(hObject, eventdata, handles)
 
statusT = get(handles.t, 'Running');                %Узнать состояние таймера
 
if strcmp(statusT,'off')                            %Если таймер выключен - 
    start(handles.t);                               %включить
    set(hObject,'ForegroundColor','r');             %изменить цвет надписи на pushStart
    set(hObject,'String',['STOP  ' datestr(now)]);  %изменить надпись на кнопке
end
 
if strcmp(statusT,'on')                             %Если таймер включен - 
    stop(handles.t);                                %выключить
    set(hObject,'ForegroundColor','b');             %изменить цвет надписи на pushStart
    set(hObject,'String',['START  ' datestr(now)]); %изменить надпись на кнопке
end
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2018, 19:24
Ответы с готовыми решениями:

Запуск и остановка таймера по нажатию кнопки
Добрый день. Прошу подсказать. Есть такая программка public class moving_test extends...

Запуск таймера на второй форме по нажатию кнопки на первой
Добрый день, столкнулся с проблемой, имеются 2 формы, нужно что бы таймер запускался во второй...

Запуск/остановка таймера по нажатию на TSpeedButton
Необходимо сделать так При нажатии на кнопку SpeedButton: • время выводимое компонентом Timer...

Запуск программы по нажатию на кнопку GUI
Здравствуйте! Не могу разобраться Есть кнопка в GUI private void...

4
Модератор
Эксперт по математике/физике
5027 / 3859 / 1325
Регистрация: 30.07.2012
Сообщений: 11,426
01.10.2018, 20:00 2
OneBit, загляните в самый низ этой страницы в раздел "Похожие темы". Можете найти для себя много полезной информации...
0
1 / 1 / 0
Регистрация: 01.10.2018
Сообщений: 15
01.10.2018, 20:19  [ТС] 3
VSI, благодарю за рекомендацию, но прежде чем создать тему с моей проблемой, в гугле уже был ))
И поиском по форуму тоже пользовался и прочитал все схожие темы, но решение данной проблемы так и не удалось найти.
Так как скорее всего проблема не стандартная, которую я указал в своём предположении,
о возможной не хватке дополнительных не используемых аргументов в функции checktime(obj, event, handles).
По этому прошу сообщество помочь разобраться.
0
1218 / 870 / 421
Регистрация: 21.10.2012
Сообщений: 2,507
02.10.2018, 11:39 4
OneBit, можете файлы скинуть?
0
1 / 1 / 0
Регистрация: 01.10.2018
Сообщений: 15
03.10.2018, 20:02  [ТС] 5
Так в старт топе я же предоставил подробное описание функций.

Уточнение.
В названии функции pushSrart_Callback есть опечатка.
На выполнение это не как не влияет, так как это название тега который везде совпадает.
Но лучше исправить, и читать как pushStart_Callback

По теме вопроса.
По поводу ошибки, как я и предполагал, ошибку создаёт функция сhecktime(obj, event, handles)
Закоментировал тринадцатую строку, и ошибка исчезла.
В принципе это строка не так важна в коде, так как она всего лишь меняет надпись на кнопке.
И на основной функционал не влияет в закоментированном виде.

Но разобраться всё же хотелось бы, почему эта строка создаёт ошибку.
И какие аргументы нужно дописать в функцию.
Или возможно дополнить код функции, чтобы исправить эту ошибку.

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
function сhecktime(obj, event, handles)
 
filename = get(handles.editPath, 'String'); %получить путь файла 
fileInfo = dir(filename);                   %получить информацию о файле
 
oldTime  = get(obj, 'UserData');            %получить время
 
if ~strcmp(fileInfo.date, oldTime)          %если время изменилось
    process(handles);                       %запустить пользовательскую функцию на выполнение
end
 
set(obj,'UserData',fileInfo.date);                      %запомнить время
%set(handles.pushStart,'String',['Stop ' datestr(now)]); %переписать время
Добавлено через 8 часов 31 минуту
Разобрался в чём ошибка.
По этому если будет кому нужно, решение простое.

В стартовой функции OpeningFcn я создаю таймер в виде структуры handles.t
по этому и передавать хендлы в 'TimerFcn' нужно как структуру.
В моём случае это

Matlab M
1
handles.d = set(handles.pushStart,'String',['STOP ' datestr(now)]);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2018, 20:02
Помогаю со студенческими работами здесь

Запуск другой программы по нажатию кнопки
Добрый вечер! Допустим, что у меня есть программа "Programma" и мой проект "Form". Каким...

Запуск bash-скриптов по нажатию кнопки
привет всем! подскажите плиз маршрут где рыть? нужно чтоб нажатием с кнопки запускались bash...

Таймер на форме. Запуск по нажатию кнопки
Добрый вечер форумчане, подскажите или поделитесь ссылкой на готовый вариант. Хочу сделать на...

Запуск Exel файла из вложения в базе по нажатию кнопки в форме
Добрый день! Подскажите, возможно ли реализовать запуск exel файла, который будет хранится в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru