使 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+ 在每个单独的小部件上提供了四个小部件属性来设置:hexpand
、halign
、vexpand
和 valign
。 h
和 v
确定 属性 适用于哪个维度(水平或垂直)。如果 expand
是 TRUE
,则在 non-expanding 小部件使用它们的 首选大小 定位后剩余的任何 space 都会给小部件。如果 align
是 GTK_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()
.
将其标记为可扩展的
我是 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+ 在每个单独的小部件上提供了四个小部件属性来设置:hexpand
、halign
、vexpand
和 valign
。 h
和 v
确定 属性 适用于哪个维度(水平或垂直)。如果 expand
是 TRUE
,则在 non-expanding 小部件使用它们的 首选大小 定位后剩余的任何 space 都会给小部件。如果 align
是 GTK_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()
.