如何使用Matlab的App设计器将文本包装在标签中

时间:2019-04-12 22:39:09

标签: matlab matlab-app-designer

我正在使用Matlab的App Designer制作GUI应用程序。我有一个贴在GUI中的标签,用于向用户说明。随着它们的进行,指令文本的长度将有所不同。当文本长度达到标签的末尾时,它将给出...并切断消息。我希望文本能包裹在标签内。

我尝试了textwrap,但它给了我一个错误,指出父母不能是标签。

要进行复制,请在Matlab的App Designer中创建一个新应用,将标签拖放到画布上,然后在其中输入长文字。标签大小将进行调整,以使其脱离应用程序窗口。如果向后调整标签宽度,它将仅用...截断文本,如下所示: Setup

Run不会更改它。

当我将文本更改为没有新行的字符串时,这是我想自动生成的: Desired

我用来更改文本的代码如下:

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

我希望我不需要重新发明轮子并设计自己的文本环绕功能。有没有一种方法可以在文档中得到澄清?

1 个答案:

答案 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可能有替代方法,但我不知道。

或者,您可以使用“编辑字段(文本)”组件代替标签,标签会自动包装文本。