如何在垂直 Gtk.Box 内水平居中 Gtk.Grid?
Posted
技术标签:
【中文标题】如何在垂直 Gtk.Box 内水平居中 Gtk.Grid?【英文标题】:How to horizontally center a Gtk.Grid inside a vertical Gtk.Box? 【发布时间】:2018-01-16 13:44:40 【问题描述】:我有一个在 Frames 中包含一些标签的 Grid,使它看起来像一个表格。该网格被插入到一个垂直的 Box 中,其中直接子标签正确居中(它们以与 Grid 相同的方式包装在框中)。
我的简化代码是这样的:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
window = Gtk.Window()
g = Gtk.Grid() # this should be in the horizontal center of the window
g.attach(Gtk.Label("This should be centered but it is not."), 0, 0, 1, 1)
b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
b.pack_start(g, True, False, 0) # The same behavior with: b.pack_start(g, True, True, 0)
b.pack_start(Gtk.Label("This label is centered as it should be. Try to resize the window."), True, False, 0)
window.add(b)
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
这是它生成的 GUI:
【问题讨论】:
【参考方案1】:您必须使用对齐和展开属性/方法来设置子容器的行为。
使用 Gtk.Box,您为两个孩子定义了 expand 为 True 和 Fill 为 False,但第一个是容器 Gtk.Grid。当您将标签添加到 Grid 时,您没有设置任何扩展或填充标志。
不确定在调整窗口大小时您希望标签如何表现,但要将 Gtk.Grid 内部的标签水平居中,然后您可以将 Gtk.Label 水平扩展设置为 true 或设置 Gtk.Grid居中对齐。
示例 - 将 Gtk.Label 水平扩展设置为 True:
g = Gtk.Grid() # this should be in the horizontal center of the window
l = Gtk.Label("This should be centered but it is not.")
l.set_hexpand(True)
g.attach(l, 0, 0, 1, 1)
但是,如果您垂直“增长”窗口,标签将彼此分开。我建议您使用 glade 并同时使用展开和小部件对齐方式。
结果:
【讨论】:
以上是关于如何在垂直 Gtk.Box 内水平居中 Gtk.Grid?的主要内容,如果未能解决你的问题,请参考以下文章