使 gtk 小部件填充父级 window

make gtk widget fill parent window

我是 gtk 编程的新手(但对 python 有经验)。我有一个 window,它有一个按钮小部件子项。想让按钮完全填满window怎么办?

顺便说一下,使用 xml(填充父级)这将非常容易,对于原生的 gtk,是否有类似于 xml 的东西?

提前致谢!

默认添加到多种类型容器的任何小部件,填充所有父级:

from gi.repository import Gtk

win = Gtk.Window()
btn = Gtk.Button("Ok")

win.add(btn)
win.show_all()
win.connect('destroy', Gtk.main_quit)

Gtk.main()

在不知道你现在的程序是什么的情况下,只能给个大概的回答。有两种方法可以解释您的第一个问题;我会回答两个。

GTK+ 中有两种类型的容器。第一个,bin,只有一个 child,child 自动给出 parent 的整个大小来填充。 GtkWindow、GtkScrolledWindow、GtkFrame 等都是 bin。如果您将小部件直接添加到 GtkWindow,就像在 Mohsen 的回答中一样,它应该填充容器。

第二种是布局容器。这些是 GtkBox 和 GtkGrid 之类的东西,可以让您将多个小部件打包到一个整洁的布局中。为此,GTK+ 在每个单独的小部件上提供了四个小部件属性来设置:hexpandhalignvexpandvalignhv 确定 属性 适用于哪个维度(水平或垂直)。如果 expandTRUE,则在 non-expanding 小部件使用它们的 首选大小 定位后剩余的任何 space 都会给小部件。如果 alignGTK_ALIGN_FILL,则小部件将填充给定的 space。 This page 应该解释得更好。

请注意,使用 GTK+ 时,小部件的大小由 parent 决定,而不是相反。小部件可以 请求 给定的大小,但是 parent 可以随意忽略它。 (GtkWindow 是一个不忽略大小请求的示例;通常它会自动调整自身大小以使其足够的内容可见,除非明确覆盖)。

有一种用于构建 GTK+ UI 的 XML-based 格式。它由 GtkBuilder 类型提供,Glade 生成这些文件,因此您不必自己编写 XML 格式。如果您确实想要手动编写您的UI文件,每个小部件的文档都会有一个部分"GtkXxx as GtkBuildable"来展示如何编写XML。

默认情况下,小部件只会获得与请求相同数量的 space,并且不会小于其最小尺寸。

如果您希望一个小部件填充其父级的可用 space,您需要使用 Gtk.Widget.set_hexpand() and Gtk.Widget.set_vexpand().

将其标记为可扩展的