使用 set(handles.text3, 'String', myString) 加载时静态文本不显示整个字符串

StackOverflow https://stackoverflow.com//questions/21010172

  •  21-12-2019
  •  | 
  •  

我正在使用由 GUIDE 与 arduino 和蓝牙模块结合制作的客户 GUI。长话短说,我希望能够通过蓝牙读取/写入 SD 卡。这一切都很好!

但!当从sd卡读回时,matlab读取到正确的数据。我可以验证这一点,因为当打印到命令窗口时,它显示了 sd 卡上的正确数据。

问题是,当我尝试将此数据设置为指南中的静态文本字符串时,会发生一些有趣的事情。静态文本可以加载文本,但是如果我向正在加载的文件添加更多文本并尝试再次读取它,它仍然只显示旧数据。我知道该字符串正在更新,因为正如我所说,当我打印到命令时,它显示了正确的数据。

我在这个项目中设置静态文本时遇到了奇怪的问题,有人有什么想法可以让它变得更容易吗?我遇到的其他问题是在回调函数的开头设置字符串,但直到回调执行整个函数或抛出错误或其他什么之后,文本才真正被更新。

有帮助吗?

解决方案 2

问题是没有绘制的,所以matlab没有绘制,直到整个函数完成。

其他提示

对于字符串 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 与数据记录类型的应用程序一起使用,以防止通信故障导致整个程序崩溃。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top