我用的是Gtk.Fixed和一个放图像的视口,有时候会重叠。我怎样才能像html那样设置z轴呢?
42fyovps1#
Gtk.Fixed不支持设置z顺序,它不适用于重叠的小部件,因此z顺序是任意的,可能取决于小部件的添加顺序。从你的问题看不出你的意图是什么如果你有意重叠小部件,请使用Gtk.Overlay。2如果你不打算重叠它们,那么你应该使用一个更通用的容器,比如Gtk.Grid,它会考虑小部件的大小。
Gtk.Fixed
Gtk.Overlay
Gtk.Grid
szqfcxe22#
就像番茄说的,我不得不使用Gtk.Overlay。我使用了一个有3个Gtk.Layout的覆盖层,就像层一样,效果很好。
Gtk.Layout
fhity93d3#
我只使用了C绑定,但我会尽我所能,希望能正确地回答Python绑定的问题。一般来说,自GTK4以来,您可以使用以下命令移动小工具
widget.insert_before (sibling, parent)
您可能希望首先获取兄弟(将位于小部件前面)和其父。该函数期望父节点是兄弟节点的父节点,因此可以假设:
parent = sibling.get_parent ()
至少在GtkFixed中(但也可能在其他容器中),兄弟容器是从下往上排序的,所以第一个孩子是离后面最远的一个。“在前面插入”可以把你的小部件移到后面。不过要注意,根据维护人员的说法,这应该只在自定义小部件中使用,而不是在应用程序范围内使用。函数的API中也提到了这一点。但是从文档来看,我不清楚这是否法律的。我怀疑这种方式是否被支持。但是我也怀疑,GtkFixed是否记录了关于孩子的命令,因此,我认为在GtkFixed中移动孩子是可以的,尽管是非法的。像这样到处移动小部件也让我的应用程序崩溃了,只要检查器打开,就像一个提醒。要从下到上迭代小部件,可以使用sibling = parent.get_first_child()和sibling = parent.get_next_sibling(),或者使用Widget上定义的迭代器。
sibling = parent.get_first_child()
sibling = parent.get_next_sibling()
3条答案
按热度按时间42fyovps1#
Gtk.Fixed
不支持设置z顺序,它不适用于重叠的小部件,因此z顺序是任意的,可能取决于小部件的添加顺序。从你的问题看不出你的意图是什么如果你有意重叠小部件,请使用
Gtk.Overlay
。2如果你不打算重叠它们,那么你应该使用一个更通用的容器,比如Gtk.Grid
,它会考虑小部件的大小。szqfcxe22#
就像番茄说的,我不得不使用
Gtk.Overlay
。我使用了一个有3个Gtk.Layout
的覆盖层,就像层一样,效果很好。fhity93d3#
我只使用了C绑定,但我会尽我所能,希望能正确地回答Python绑定的问题。
一般来说,自GTK4以来,您可以使用以下命令移动小工具
您可能希望首先获取兄弟(将位于小部件前面)和其父。
该函数期望父节点是兄弟节点的父节点,因此可以假设:
至少在GtkFixed中(但也可能在其他容器中),兄弟容器是从下往上排序的,所以第一个孩子是离后面最远的一个。“在前面插入”可以把你的小部件移到后面。
不过要注意,根据维护人员的说法,这应该只在自定义小部件中使用,而不是在应用程序范围内使用。函数的API中也提到了这一点。
但是从文档来看,我不清楚这是否法律的。我怀疑这种方式是否被支持。但是我也怀疑,GtkFixed是否记录了关于孩子的命令,因此,我认为在GtkFixed中移动孩子是可以的,尽管是非法的。
像这样到处移动小部件也让我的应用程序崩溃了,只要检查器打开,就像一个提醒。
要从下到上迭代小部件,可以使用
sibling = parent.get_first_child()
和sibling = parent.get_next_sibling()
,或者使用Widget上定义的迭代器。