处理“将子项添加到Gtk.Box”事件

处理“将子项添加到Gtk.Box”事件,gtk,gtk3,pygobject,Gtk,Gtk3,Pygobject,据我所知,我可以订阅Gtk.Box signal add child: box.connect("add", self.__add_to_switch_list) 当我按box.addchild添加child时,它将被调用,并且它正在工作 但是我将如何使用box.pack\u启动方法执行相同的操作?没有办法 add仅在调用GtkContainer.add时发出。 此信号的第一个处理程序是subclass的方法。例如,GtkBox执行以下操作: /* gtk_box_class init: */

据我所知,我可以订阅Gtk.Box signal add child:

box.connect("add", self.__add_to_switch_list)
当我按box.addchild添加child时,它将被调用,并且它正在工作

但是我将如何使用box.pack\u启动方法执行相同的操作?

没有办法

add仅在调用GtkContainer.add时发出。 此信号的第一个处理程序是subclass的方法。例如,GtkBox执行以下操作:

/* gtk_box_class init: */
container_class->add = gtk_box_add;
...

static void
gtk_box_add (GtkContainer *container,
         GtkWidget    *widget)
{
  GtkBoxPrivate *priv = GTK_BOX (container)->priv;

  gtk_box_pack_start (GTK_BOX (container), widget,
                      priv->default_expand,
                      TRUE,
                      0);
}

在这种情况下,@ebassi告诉您可以连接到子部件的父集合信号。如果你不知道父母什么时候有了一个新的孩子,你可以知道孩子什么时候有了一个新的父母,这大致是一样的。

谢谢,是的,我提交了一个关于这个问题的bug,或者将这个信号发射添加到GTK+。但它被关闭/拒绝了。这是令人沮丧的,因为对于动态小部件来说,它在视觉上的变化取决于孩子的数量,这是一个非常理想的特性——在一个地方处理这个问题。是的,这是一个解决办法。但绝对不一样。在如何实施和正确工作方面。如果是盒子,我只能在一个地方处理。容器响应于发射这个信号。如果我使用父集合,子集合将了解父集合。或者,当child被添加到这个容器中时,我将容器方法动态地连接到child的父集合。但不用担心,我刚刚用child added和child remove信号实现了自己的Box。