我正在使用Matlab的App Designer制作GUI应用程序。我有一个贴在GUI中的标签,用于向用户说明。随着它们的进行,指令文本的长度将有所不同。当文本长度达到标签的末尾时,它将给出...
并切断消息。我希望文本能包裹在标签内。
我尝试了textwrap
,但它给了我一个错误,指出父母不能是标签。
要进行复制,请在Matlab的App Designer中创建一个新应用,将标签拖放到画布上,然后在其中输入长文字。标签大小将进行调整,以使其脱离应用程序窗口。如果向后调整标签宽度,它将仅用...
截断文本,如下所示:
按Run
不会更改它。
当我将文本更改为没有新行的字符串时,这是我想自动生成的:
我用来更改文本的代码如下:
methods (Access = private)
% Callback function
function ButtonPushed(app, event)
app.Label.Text = "Lorem ipsum dolor sit amet consectetur adipiscing elit. Vivamus scelerisque nisi ac enim faucib porttitor velit varius. Phasellus luctus ullamcorper nul sit amet finibus neque vehicula ut. Nulla pellentesque.";
end
end
我希望我不需要重新发明轮子并设计自己的文本环绕功能。有没有一种方法可以在文档中得到澄清?
答案 0 :(得分:0)
您可能不再需要此功能,但对于与OP和我有相同问题的任何人:我已经为textwrap
写了一个包装器。在这里:
function wrapLabelText(label, txt)
% Create a uicontrol whose text will look like that of the label.
h = uicontrol( ...
'Style', 'Text', ...
'Parent', figure('Visible', 'off'), ... % Make sure the containing figure is invisible.
'Position', label.Position, ...
'FontUnits', 'pixels', ... % By default App Designer uses 'pixels' but uicontrol uses 'points'. Define before the FontSize!
'FontSize', label.FontSize, ...
'FontName', label.FontName, ...
'FontAngle', label.FontAngle, ...
'FontWeight', label.FontWeight, ...
'HorizontalAlignment', label.HorizontalAlignment ...
);
% Determine where the text will be wrapped.
outtext = textwrap(h, {txt});
delete(h);
% Assign the text to the label.
label.Text = outtext;
end
第一个输入是uilabel对象,第二个输入是您想要作为Text
属性的文本。因为我们要创建一个图形然后再次删除它,所以它不是超级快(更新约0.05s)。在您的代码中,您将其称为:
% Callback function
function ButtonPushed(app, event)
txt = 'Lorem ipsum dolor sit amet consectetur adipiscing elit. Vivamus scelerisque nisi ac enim faucib porttitor velit varius. Phasellus luctus ullamcorper nul sit amet finibus neque vehicula ut. Nulla pellentesque.';
wrapLabelText(app.Label, txt);
end
结束
在uilabel上直接使用textwrap的原因不起作用是因为textwrap是针对使用GUIDE(而不是App Designer)创建的组件的。 App Designer可能有替代方法,但我不知道。
或者,您可以使用“编辑字段(文本)”组件代替标签,标签会自动包装文本。