Matlab GUI编辑文本框:如何添加一行而不是替换所有内容?

时间:2015-05-19 19:27:27

标签: matlab user-interface matlab-guide

有没有办法做到这一点?我想提供有关模拟过程中发生的事情的信息。我显然每次都可以将文字设置为previousString + newString,但这需要花费很多时间。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚模拟日志是如何生成的,也许是保存的(在日志文件中?是否可以直接在GUI中使用?)。

然而,一个可能的解决方案可能是:

  • 将文本框的大小设置为diplay" some"行(例如,最大4)
  • 使用cellarray设置/存储模拟日志的每一行以显示在文本框中。 Cellarrays允许管理不同长度的多个文本行(通过handlesguidata)
  • 每次必须显示新字符串时,将其添加到cellarray
  • 检查文本框中要显示的最大行数:
    • 如果达到了最大数量hsa,则向上移动cellarray的内容并将新字符串添加到cellarray中的最后一个位置

我已经构建了一个简单的GUI,其中包含一个最多4行的文本框和一个用于添加字符串的按钮(用于模拟"模拟日志)。

字符串计数器已在GUI OpeningFcn中初始化,如下所示:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Get GUIDATA
gui_my_data=guidata(handles.figure1);
% Add string counter to handles
gui_my_data.str_cnt=0;
% Update GUIDATA
guidata(handles.figure1,gui_my_data);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

在按钮Callback中,我插入了更新文本框内容的代码,如下所示:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get GUIDATA
gui_my_data=guidata(handles.figure1);
% Get string counter from GUIDATA
n_rows=gui_my_data.str_cnt;
% If maximum rows to be diplayed not reached, add the new string
if(n_rows < 4)
   n_rows=n_rows+1;
   if(n_rows == 1)
      c_str=cellstr(get(handles.text1,'string'));
   else
      c_str=get(handles.text1,'string');
   end
% Generate the new string   
   c_str{n_rows}=['row #' num2str(n_rows)];
% Update textbox content
   set(handles.text1,'string',c_str);
% Save string counter
   gui_my_data.str_cnt=n_rows;
else
% If maximum rows to be diplayed reached, get the strings
   c_str=get(handles.text1,'string');
% Shift up previous string
   c_str(1:3)=c_str(2:4);
   n_rows=n_rows+1;
   gui_my_data.str_cnt=n_rows;
% Generate the new string and add it to the textbox
   c_str{4}=['riga #' num2str(n_rows)];
   set(handles.text1,'string',c_str);
end
% Update GUIDATA
guidata(handles.figure1,gui_my_data);

enter image description here

希望这有帮助。