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

ser*_*off 5 user-interface label alignment vala

我正在编写Vala应用程序并在其中使用GtkLabels.问题是,我使我的主窗口无法调整大小,当我添加带有长文本的标签时,窗口变得非常大(当窗口可调整大小时,所有标签都完美贴合).我尝试了set_max_width_chars()一些有用的功能,但我认为这不是正确的方法(因为用户的字体可能会有所不同,这不适用于与我不同的字体大小).

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

LRN*_*LRN 7

您不能直接限制标签的宽度(除了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(例如GtkCellRendererText在a内GtkTreeView)的标签和其他文本小部件.

用GTK + -3.18.2测试


mes*_*azs 0

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