1

我正在使用 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

我希望我不需要重新发明轮子并设计自己的文本换行功能。是否有一种方法尚未在文档中阐明?

4

2 回答 2

1

您可能不再需要这个,但对于任何与 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.05 秒)。在您的代码中,您可以将其称为:

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

或者,您可以使用“编辑字段(文本)”组件而不是标签,它应该自动换行文本。

于 2019-07-26T14:26:39.567 回答
0

非常感谢您的代码,由于某种原因,它在我的 MATLAB 2019b 中不起作用,通过在此行中添加最大文本宽度选项来修复:

*outtext = textwrap(h, {txt}, 20);*

20 表示最大文本宽度为 20 个字符。

于 2020-01-06T13:38:59.067 回答