如何在垂直Gtk.Box中水平居中Gtk.Grid?

时间:2017-08-08 20:37:57

标签: python-2.7 window gtk3 grid-layout msys2

我有一个Grid,其中包含Frames中的一些标签,使其看起来像一张桌子。此网格插入垂直框中,其中直接子标签正确居中(它们以与网格相同的方式打包在框中)。

我的简化代码是:

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:

Screenshot of the code example.

1 个答案:

答案 0 :(得分:2)

您必须使用Alignment和Expand属性/方法来设置子容器的行为。

使用Gtk.Box,您为两个孩子定义了扩展为True和Fill为False,但第一个是容器,Gtk.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并同时使用expand和widget alignment。

结果: result ui