Статический текст, не отображающий всю строку при загрузке с помощью set(handles.text3, 'String', myString)

Я использую клиентский графический интерфейс, созданный с помощью GUIDE, в сочетании с модулем arduino и bluetooth. Короче говоря, я хочу иметь возможность читать/записывать через Bluetooth на SD-карту. Это все отлично работает!

Но! При обратном считывании с SD-карты матлаб считывает правильные данные. Я могу это проверить, потому что при печати в командное окно показывает правильные данные, которые были на sd-карте.

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

У меня были странные проблемы с настройкой статического текста в этом проекте. У кого-нибудь есть идеи, как это упростить? Другие проблемы, которые у меня были, заключались в установке строки в начале функции обратного вызова, но текст фактически не обновлялся до тех пор, пока обратный вызов не выполнил всю функцию или не выдал ошибку или еще что-то.


person user1902893    schedule 09.01.2014    source источник
comment
Вам придется обновить свойство String дескриптора статического текста. Если вы делаете что-то вроде myString = 'foo'; set(handles.text3, 'String', myString); myString = 'bar';, свойство String не обновляется автоматически... оно будет продолжать отображать foo.   -  person sebastian    schedule 09.01.2014
comment
Matlab иногда немного тормозит при обновлении графики. Можете ли вы проверить, сохраняется ли проблема при добавлении drawnow после обновления?   -  person bdecaf    schedule 09.01.2014


Ответы (2)


Является ли строка слишком длинной для строкового элемента GUI, например, строковый элемент GUI может содержать только 5 строк, а вы пытаетесь отобразить 6, затем 7 и т. д.?

Matlab не создает полосы прокрутки для статического текста автоматически. См. http://www.mathworks.com/matlabcentral/newsreader/view_thread/148773 для обсуждения альтернатив. То, что я делаю (любезно предоставлено коллегой, показывающим мне это) на дисплеях журнала в реальном времени (при условии, что это в цикле), это, где TxtMssg является моим текстовым «полем», а rec_line является строкой, которую я считываю из последовательного порта. .

try
    % Determine NumLines empirically for your font, font size, and static text size
    NumLines = 21;
    % Get the contents of the static text box, make a cell if necessary
    Mssg = get(handles.TxtMssg, 'string');
    if iscell(Mssg) == 0
        Mssg={Mssg};
    end
    % Cat on the newly received line
    Mssg = [Mssg; rec_line];
    % trim to length of textbox, last NumLines rows only
    if length(Mssg) > NumLines
        Mssg = Mssg((end-NumLines+1):end);
    end
    % Write Mssg, with a strtrim() in case of any trailing newlines
    set(handles.TxtMssg, 'string', strtrim(Mssg));
catch err
    % Error handling
end

Я рекомендую использовать try/catch/end с приложениями типа регистрации данных, чтобы предотвратить сбой связи из-за сбоя всей программы.

person schodge    schedule 09.01.2014

Проблема заключалась в отсутствии отрисовки, поэтому Matlab не рисовал, пока вся функция не была завершена.

person user1902893    schedule 24.01.2014