如何正确设置 GtkLabel 的最大宽度?

Posted

技术标签:

【中文标题】如何正确设置 GtkLabel 的最大宽度?【英文标题】:How to set max width of GtkLabel properly? 【发布时间】:2015-02-12 07:15:30 【问题描述】:

我正在编写一个 Vala 应用程序并在其中使用 GtkLabels'。问题是,我让我的主窗口无法调整大小,当我向其中添加带有长文本的标签时,窗口变得非常大(当窗口可调整大小时,所有标签都非常适合)。我尝试将set_max_width_chars() 设置为某个值并且它有点工作,但我想这不是正确的方法(因为用户的字体可能会有所不同,这不适用于与我不同的字体大小) .

那么,问题是:如何以正确的方式做到这一点?

【问题讨论】:

我也很好奇如何做到这一点; GTK 似乎有很多设置最小宽度的函数,但 set_max_width_chars() 实际上是我能找到的唯一一个设置最大值的函数。 【参考方案1】:

您不能直接限制标签的宽度(max-width-chars 除外,它以字符而不是像素为单位),但您可以通过影响包含它的框的大小和设置来间接限制它4 不立即明显的标签属性。

考虑以下场景:

你有一个盒子 您有多个带有小部件的子框 所有小部件都有其自然大小,该大小可以更大或更小,但总是合理的

结果:

框会根据需要展开以适应所有小部件

现在是标签:

一个/一些框中有标签(可能有多个标签) 标签文本可以是任何内容,包括很长的字符串 您没有告诉标签换成多行(这是默认设置)

结果:

框被扩大到荒谬的宽度以容纳标签(其他小部件要小得多)

在这种情况下,可以使用以下修复:

将标签的max-width-chars 设置为一个小的正值(1 可以正常工作) 将标签的ellipsize 设置为PANGO_ELLIPSIZE_NONE 以外的任何值 将标签的hexpand设置为TRUE(或将标签的expand设置为TRUE,后果很明显) 将标签的fill(作为其所在子框的子项)设置为TRUE(如果vexpand 也是TRUE,您可能希望将其填充限制为仅水平方向)

结果:

框的宽度仅取决于其他小部件的宽度,不受标签文本长度的影响 无论max-width-chars 的正值有多小,标签都会扩展以填充可用空间(空间仅取决于框的宽度,见上文) 如果标签文本太长以至于无法放入可用空间,则会被省略

这适用于具有ellipsizemax-width-chars 的标签和其他文本小部件(例如GtkCellRendererTextGtkTreeView 中)。

用 GTK+-3.18.2 测试

【讨论】:

不直观,但效果很好,也适用于 GTK 2.x,谢谢!【参考方案2】:

我认为您的标签应该放在容器中,并且封闭容器的大小应该适当。如果这对您没有用的建议,您可以考虑发布屏幕截图以更好地了解您的要求。

【讨论】:

你可以试试 Alignment 上的set_size_request 方法:valadoc.org/#!api=gtk+-3.0/Gtk.Widget.set_size_request 试过这个:titleAlignment.add(titleLabel); titleAlignment.set_size_request(625, -1); box.add(titleAlignment);这似乎没有效果。

以上是关于如何正确设置 GtkLabel 的最大宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据最大选项宽度设置反应选择宽度?

如何将最大宽度设置为百分比或静态值

这个网站上的最大宽度是如何设置的? [关闭]

如何设置 dijit.ToolTip 的最大宽度?

如何设置 select2 下拉菜单的最小宽度和最大宽度?

如何正确设置 p:autoComplete 宽度以填充面板