在MATLAB GUI中显示分析结果

3 matlab user-interface display

我的问题是:我有一个MATLAB GUI,如果我运行它以显示在我的GUI而不是命令窗口中,我想要得到的分析结果.我尝试使用列表框来显示结果,因为为列表框自动创建了滑块,但它不起作用.如何使用静态文本框显示数据?

gno*_*ice 8

首先,您必须确保禁止输出到命令窗口.您可以通过确保以分号结束行,避免使用DISP函数显示数据,并避免使用FPRINTF函数将数据发送到标准输出(即命令窗口)来完成此操作.

其次,确定您想要显示的"结果"类型.如果它是数值的向量或矩阵,您可能需要使用UITABLE对象而不是静态文本框(如Azim对其他问题的回答中所建议的那样,假设您有一个较新版本的MATLAB).如果它只是几个数值,字符或字符串,那么我建议使用静态文本框.例如:

hList = uicontrol('Style','text','Position',[100 100 200 200]);
set(hList,'String',{'Line 1'; 'Line 2'});  % Displays 2 lines, one string each
vec = rand(3,1);  % Column array of 3 random values
set(hList,'String',num2str(vec));  % Displays 3 lines, one number per line
Run Code Online (Sandbox Code Playgroud)

使用此选项,您可能最终会使用字符串操作做很多事情.

注意:对于静态文本框,如果您在其中放置的文本多于它们能够显示的文本,则它们将简单地剪切文本.它们不会自动创建滑块来查看整段文本.您将要么必须使静态文本框更大,将静态文本框的"FontSize"属性调整为更小的值,或者(更复杂的选项)创建自己的滑块,该滑块将调整文本框中显示的内容.


编辑:更复杂的选项......

如果有人感兴趣,我想我会包含一些示例代码,用于创建一个带有滑块的静态文本框,该滑块控制文本框中显示的内容.有很多不同的方法可以做到这一点,从我能想到的最简单的实现(下面给出)到使用嵌套函数花哨的OOP东西的更复杂的版本.

首先,您必须将以下两个函数保存为m文件:

callback_scrolltext.m

function callback_scrolltext(source,event,hText)
  textString = get(hText,'UserData');
  nLines = numel(textString);
  lineIndex = nLines-round(get(source,'Value'));
  set(hText,'String',textString(lineIndex:nLines));
end
Run Code Online (Sandbox Code Playgroud)

update_scrolltext.m

function update_scrolltext(newText,hText,hSlider)
  newText = textwrap(hText,newText);
  set(hText,'String',newText,'UserData',newText);
  nRows = numel(newText);
  if (nRows < 2),
    sliderEnable = 'off';
  else
    sliderEnable = 'on';
  end
  nRows = max(nRows-1,1);
  set(hSlider,'Enable',sliderEnable,'Max',nRows,...
      'SliderStep',[1 3]./nRows,'Value',nRows);
end
Run Code Online (Sandbox Code Playgroud)

其次,使用以下代码创建GUI对象.您可以将"位置"属性设置为您想要的任何属性,也可以使用图形或面板对象的任何句柄代替hParent:

hParent = figure;
hText = uicontrol('Style','text',...
                  'Parent',hParent,...
                  'Units','pixels',...
                  'Position',[100 100 100 40]);
hSlider = uicontrol('Style','slider',...
                    'Parent',hParent,...
                    'Units','pixels',...
                    'Position',[200 100 10 40],...
                    'Enable','off',...
                    'Callback',{@callback_scrolltext,hText});
Run Code Online (Sandbox Code Playgroud)

最后,每次要更改文本框的文本时,请使用要显示的文本调用update_scrolltext(包含在单元格数组中,就像输入到TEXTWRAP的字符串一样)以及文本框和滑块的句柄.以下是一些尝试的示例:

update_scrolltext({'hello'},hText,hSlider);
update_scrolltext({'hello'; 'there'; 'silly'; 'world'},hText,hSlider);
Run Code Online (Sandbox Code Playgroud)

根据您的需要修改代码并享受!=)