使用 set(handles.text3, 'String', myString) 加载时静态文本不显示整个字符串
-
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
与数据记录类型的应用程序一起使用,以防止通信故障导致整个程序崩溃。
不隶属于 StackOverflow