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

时间:2014-12-13 19:46:09

标签: user-interface alignment label vala

我正在编写Vala应用程序并使用GtkLabels'在里面。问题是,我使主窗口无法调整大小,当我添加带有长文本的标签时,窗口变得非常大(当窗口可调整大小时,所有标签都完美贴合)。我试图set_max_width_chars()有一些价值,但它有点有效,但我想这不是正确的方法(因为用户的字体可能会有所不同,这不会影响我们的工作字体大小与我的不同。)

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

2 个答案:

答案 0 :(得分:6)

您不能直接限制标签的宽度(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内的GtkTreeView)。

使用GTK + -3.18.2进行测试

答案 1 :(得分:0)

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