Перейти к содержанию
    

Вопрос по GUI

В цикле читаю по Ethernet данные и вывожу на экран Figure1. Если нужно разорвать цикл жму кнопку 

Stop loop. Проблема в том что после этого Figure1 закрывается. Как правильно обработать нажатие?

Сейчас делаю так:

    if ~ishandle(ButtonHandle)
        disp('Loop stopped by user');
        break;
    end

Изменение на:

    if ~ishandle(ButtonHandle)
        disp('Loop stopped by user');
		while(1)
		end;
    end

проблему не снимает, всё равно закрывается.

image.thumb.png.528b1f023d1c6b161807afa63cc8f6f8.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Желательно указать версию Матлаба и выложить сюда весь скрипт без Ethernetа, который бы демонстрировал проблему.

Что закрывает figure1?

Всякие hold on не помогают?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, лучше бы взглянуть на весь код или тот кусок, что создает гуй.

Решение в таких случаях простое: создайте figure и axis заранее (перед циклом чтения по Ethernet), сохраните хэндлы на них и затем с их помощью управляйте своим UI, никуда ничгео не должно исчезать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, syoma сказал:

Желательно указать версию Матлаба и выложить сюда весь скрипт без Ethernetа, который бы демонстрировал проблему.

Что закрывает figure1?

Всякие hold on не помогают?

 

Нет, не помогают. Если под if поставить hold on то при нажатии фигура закрывается на немного, потом опять открывается но уже пустая.

Так объявляется кнопка, может для Callback нужно что-то другое предложить?

ButtonHandle = uicontrol('Style', 'PushButton', ...
                         'String', 'Stop loop', ...
                         'Callback', 'delete(gcbf)');

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, _sda said:

ButtonHandle = uicontrol('Style', 'PushButton', ...
                         'String', 'Stop loop', ...
                         'Callback', 'delete(gcbf)');

 

ваш callback удаляет UI, содержащий кнопку! UI - figure то бишь, который кнопку содержит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, alexunder сказал:

ваш callback удаляет UI, содержащий кнопку! UI - figure то бишь, который кнопку содержит.

Спасибо! Сейчас попробую написать функцию обработки нажатия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, _sda said:

Спасибо! Сейчас попробую написать функцию обработки нажатия.

в приведенном ранее коде эта функция у Вас задается в виде текстовой строки для параметра callback. Вы можете объявить ее иначе, например:

ButtonHandle = uicontrol('Style', 'PushButton', ...
                         'String', 'Stop loop');
ButtonHandle.Callback = @callback_routine
  
  function callback_routine(src,event)
        % тело обработчика
    end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что то не выходит... Сейчас сделал так:

ButtonHandle = uicontrol('Style', 'PushButton', ...
                          'String', 'Stop loop', ...
                          'Callback', @Edit_ButtonHandleCallBack);
.........
    if ~ishandle(ButtonHandle)
		if stop == 1
			disp('Loop stopped by user');
			break;
		end
    end
.........
    function Edit_ButtonHandleCallBack(~,~)
        stop = 1
    end

Цикл не останавливается хотя stop по нажатию становится = 1.

Всё получилось, большое спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы так и не сказали, какой у вас Матлаб.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, syoma сказал:

Вы так и не сказали, какой у вас Матлаб.

R2016b. Извиняюсь, но уже всё работает. Упростил всё до минимума.

% это в цикле
	if stop == 1
		disp('Loop stopped by user');
		break;
	end
....................
    function Edit_ButtonHandleCallBack(~,~)
 		stop = 1;
    end

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги, у меня был установлен САПР от XILINX, после его удаления при запуске матлаба выдаются такие предупреждения. Это можно как то отремонтировать?

На экспоненте спрашивал, ответа не получил.

 вопрос на экспоненте

image.png.203fc0624a2ddfcc2c54909f85b2fd57.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, syoma сказал:

Попробуйте edit pathdef.m

Есть там эти пути?

Нету. По ссылке те действия которые я делал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, _sda said:

Коллеги, у меня был установлен САПР от XILINX, после его удаления при запуске матлаба выдаются такие предупреждения. Это можно как то отремонтировать?

похоже, что матлаб может смотреть в какой-то иной pathdef.m файл, где эти пути присутствуют и файл этот может находиться в каталоге с проектом или еще где-то.

Вот здесь есть вопрос-ответ от Matlab.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, alexunder сказал:

похоже, что матлаб может смотреть в какой-то иной pathdef.m файл, где эти пути присутствуют и файл этот может находиться в каталоге с проектом или еще где-то.

Вот здесь есть вопрос-ответ от Matlab.

Большое спасибо,коллега! Всё получилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...