如何正确设置 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
的正值有多小,标签都会扩展以填充可用空间(空间仅取决于框的宽度,见上文)
如果标签文本太长以至于无法放入可用空间,则会被省略
这适用于具有ellipsize
和max-width-chars
的标签和其他文本小部件(例如GtkCellRendererText
在GtkTreeView
中)。
用 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 的最大宽度?的主要内容,如果未能解决你的问题,请参考以下文章