Gtk +中是否有办法将一个小部件堆叠在另一个小部件之上 - 不计算GtkFixed? GtkFixed不能很好地工作有两个原因:1)我需要Z顺序,2)我需要一个小部件来拉伸和填充提供的空间。
答案 0 :(得分:3)
我使用Gtk :: Fixed(实际上是gtk.Fixed - pygtk - 但我觉得它下面都是一样的)我有这个问题,并且通过操作每个小部件的窗口我能够很容易地处理它。
在我的情况下,小部件已经是EventBox实例,我只需要确保我拖动的那个是在顶部,因为否则它滑到其他人之下,看起来非常错误。解决方案就像调用“widget.window.raise_()”一样简单,以便在单击小部件以开始拖动时提升小部件的基础窗口。
所以我基本上只是重申前一个答案是有效的,但我想指出它实际上非常简单。听起来你可能需要创建一些EventBox来保存你的小部件,但之后它应该可以工作。
看到我正在处理的代码答案 1 :(得分: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
答案 2 :(得分:0)
我完全能够做到这一点-
通过使用GtkFixed在gtk2中在整个空间中显示一个小部件,然后在固定位置的顶部显示另一个小部件,这两个小部件可以同时显示
,计算出合适的插入顺序(首先插入-底部,最后插入-顶部),以及-最重要的是!-强制GtkFixed具有自己的窗口:< / p>
`f := gtk_fixed_new();
gtk_widget_set_has_window(f, 1);`
如果不执行set_has_window(f,1),则所有子窗口都将插入到某些父窗口小部件/窗口中(请参阅gtkfixed.c中的gtk_fixed_realize()),这可能会造成z顺序混乱。