2013-08-20 7 views
0

Я сделал программу, с помощью которой я пытаюсь выполнить автоматические измерения. Программа работает до сих пор, но я не уверен, что это правильный способ сделать это.Обновление GUI GUI из функции, вызванной GUI

Программа состоит из двух функций:

  • meassure (мер одного устройства, участки данных и сохраняет его в файл Excel)
  • measureAutomatically (использует матрицу с 0 и 1, движется для всех устройств в матрице, и если в матрице устройства есть 1, это вызовет функцию измерения. С параметрами: имя файла Excel и дескриптор для графика/осей, где они будут построены)

I также добавлен графический интерфейс с ch генерируется матрица устройства. Нажатие кнопки запускает функцию measureAutomatically.

Графический интерфейс пользователя должен показывать текущее измерение (в режиме реального времени, а не после его завершения), и он должен изменить цвет прямоугольника в других осях от серого до зеленого/красного, если измерение было успешным или нет (например, индикатор того, что делается в данной точке)

До сих пор я давал функции измерения дескриптор оси для построения и форматирования графика в функции измерения.

Я не уверен, что делать с обновлением вещи прямоугольника. В данный момент функция measureAutomatically получает результат измерения, а затем ищет ответный вызов (findobj by tag) и меняет цвет.

Я бы хотел, чтобы функции были независимы от GUI (что сейчас не так). Так должен ли я использовать функцию в графическом интерфейсе для изменения прямоугольника? Но как мне это сделать? Или что это правильный способ сделать что-то подобное. Я все еще новичок в Matlab, но я не просто хочу заставить его работать, но и хочу узнать правильный способ сделать это.

ответ

0

Я бы, конечно, сделать функцию, которая принимает статус измерения и делать то, что нужно после

function updateStatus(status, isGUI) 
    if isGUI 
     if status 
      % Change the rectangle color to green 
     else 
      % Change the rectangle color to red 
     end 
    else 
     if status 
      % Do something else 
     else 
      % Do something else 
     end 
    end 

Вы также можете передать ручки на объекты на рисунке UserData или использовать setappdata/getappdata и ссылки на объекты прямо, не ища их по findobj. Но это вопрос предпочтения.

+0

спасибо, но я думаю, что у меня не было полностью, как это сработает. Эта функция будет находиться в файле GUI m или в отдельном файле? А затем вызывается функцией measureAutomatically? – josh21

+0

Вы можете поместить эту функцию в свой файл m-файла GUI или отдельно в той же папке (или на пути Matlab). Опять же, это вопрос предпочтения, будь то все функции в одном файле или в отдельных файлах. Я предпочитаю иметь их в отдельных файлах. 'UpdateStatus' будет вызываться функцией' measureAutomatically'. Я включил опцию 'isGUI', которая может использоваться для переключения на некоторую другую индикацию состояния (например, запись в файл). Вы можете реализовать любую логику, что делать после получения статуса измерения. – peterk

Смежные вопросы