2009-06-30 70 views
2

Gtk +中有一种方法可以将一个小部件堆叠在另一个上 - 不包括GtkFixed? GtkFixed不能很好地工作,原因有两个:1)我需要Z顺序,2)我需要一个小部件来伸展和填充提供的空间。在Gtk中堆叠小部件+

+0

你只是想在同一时间显示在某一地方一个小部件工作的代码,填充空间,或更复杂的东西? – liori 2009-06-30 20:57:05

+0

我想显示一个填充整个空间的小部件,然后在固定位置的另一个小部件上,同时可见。 – c4757p 2009-06-30 21:02:18

+0

现在,是的,确实有一个控件允许控制Z顺序和对齐:[`GtkOverlay`](https://developer.gnome.org/gtk3/stable/GtkOverlay.html)。 – 2017-10-10 12:01:06

回答

1

我不认为标准GTK中有适当的容器。我将继承Gtk :: Fixed ...它仍然是最接近的一个,如果你使用gtkmm,那么子类化不应该很困难¹。然后,您可以控制所有小部件的尺寸,将一个选定的小孩拉伸以填充空间。

要控制Z轴,您可能需要操作窗口小部件的X窗口 - 查看关于GDK窗口主题的GDK文档。我记得在PyGTK中每个部件都有gtk.Widget.window属性,我想对gtkmm也是一样。这假定你的所有子窗口小部件都有X窗口,所以f.e.你需要在Gtk :: EventBox中包装Gtk :: Label。

¹http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-customwidgets.html

²http://www.gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGdk_1_1Window.html#6eef65b862344ad01b01e527f2c39741

3

我不得不使用一个GTK ::修复了这个问题,确切的(实际上gtk.Fixed - pygtk的 - 但我认为这是完全一样的下方),然后我就能够通过操作每个小部件的窗口来轻松处理它。

在我的情况下,小部件已经是事件盒的情况下,我只需要确保一个我拖着周围的人在上面,因为否则下跌他人,看得出来非常错误的下面。该解决方案与调用“widget.window.raise_()”一样简单,以在单击小部件开始拖动时提升小部件的底层窗口。

所以我基本上只是重申,以前的答案有效,但我想指出,它其实很简单。这听起来像你可能需要创建一些事件框来容纳你的小部件,但之后它应该可以工作。

你可以看到我在http://github.com/divegeek/BlockHead