我的问题是:我有一个MATLAB GUI,如果我运行它,我希望得到的分析结果出现在GUI中而不是命令窗口中。我尝试使用列表框来显示结果,因为列表框自动创建了滑块条,但是没有成功。我该如何显示数据,也许可以使用静态文本框?
我的问题是:我有一个MATLAB GUI,如果我运行它,我希望得到的分析结果出现在GUI中而不是命令窗口中。我尝试使用列表框来显示结果,因为列表框自动创建了滑块条,但是没有成功。我该如何显示数据,也许可以使用静态文本框?
首先,您需要确保抑制任何输出到命令窗口。您可以通过确保使用semicolon结束行来实现此目的,避免使用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
编辑:更复杂的选项...
如果有人感兴趣,我想包含一些示例代码,用于创建一个静态文本框和一个滑块,该滑块控制在文本框中显示的内容。有很多不同的方法可以做到这一点,从我能想到的最简单的实现(如下所示)到使用嵌套函数和高级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
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
其次,使用以下代码创建GUI对象。您可以将“Position”属性设置为任何您想要的值,并且可以使用任何图形或面板对象的句柄来代替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});
最后,每次想要更改文本框的文本时,请使用包含所需显示文本的单元数组(与输入到TEXTWRAP的字符串相同)以及文本框和滑块的句柄调用update_scrolltext。以下是一些示例:
update_scrolltext({'hello'},hText,hSlider);
update_scrolltext({'hello'; 'there'; 'silly'; 'world'},hText,hSlider);
根据您的需要修改代码并享受!=)
message = 'New output to be appended';
set(status,'String', [message; get(status,'String')]);
set(status,'String', [message; {get(status,'String')}]);
我通常只是使用一个图形并在其中添加文本,例如:
figure(gcf)
text(offsetX1, offsetX1, ['result 1: ' num2str(result1)])
text(offsetX2, offsetX2, ['result 2: ' num2str(result2)])
现在我相信有更好的方法,但这对我来说效果很好,即使你必须手动设计布局细节。
update_scrolltext()
时,先前输入的文本消失?换句话说,我该如何修改上述代码以在新行上显示新文本,并将先前的文本置于其上方?谢谢。 - user238469update_scrolltext
的开头添加以下内容,它应该会添加而不是覆盖:oldText = get(hText, 'UserData'); newText = [oldText; newText];
- gnovice