如何更改Gtk.EventBox中显示的图像?

如何更改Gtk.EventBox中显示的图像?,gtk,gtk3,vala,Gtk,Gtk3,Vala,我正在尝试用GTK和Vala实现一个可点击的图像。据我所知,最好的方法是使用EventBox。但是,我的要求之一是更改EventBox中显示的图像。我试着这样做,但是,即使第一个图像在点击时消失,第二个图像却从未出现。为什么会这样?我错过了什么 using Gtk; class Window : Gtk.Window { private EventBox evbox = new EventBox (); private Image img_a = new Image ();

我正在尝试用GTK和Vala实现一个可点击的图像。据我所知,最好的方法是使用EventBox。但是,我的要求之一是更改EventBox中显示的图像。我试着这样做,但是,即使第一个图像在点击时消失,第二个图像却从未出现。为什么会这样?我错过了什么

using Gtk;

class Window : Gtk.Window {
    private EventBox evbox = new EventBox ();
    private Image img_a = new Image ();
    private Image img_b = new Image ();

    public Window () {
        this.destroy.connect (Gtk.main_quit);

        img_a.set_from_file ("a.png");
        img_b.set_from_file ("b.png");

        evbox.button_press_event.connect ( () => { swap_img (); return true; } );
        evbox.add (img_a);

        this.add (evbox);
    }

    public void swap_img () {
        evbox.remove (img_a);
        evbox.add (img_b);
    }


    public static int main (string[] args) {
        Gtk.init (ref args);

        var window = new Window ();

        window.show_all ();
        Gtk.main ();
        return 0;
    }
}

您必须致电
img_b.show()
。非常感谢!它起作用了。因此,为了确保我理解,因为我似乎不需要调用img_a.show(),window.show_all()是否对窗口的所有子级和子级调用show()方法?所以,既然img_b最初不是任何事物的子对象,它就没有显示出来?正确。这些都在参考文档中解释过了。你说得对,我在文档中找到了它,谢谢!但另一个问题是,当我从文件中设置show方法时,什么会阻止我对每个图像调用一个show方法呢。这会影响内存使用还是其他什么?如果图像不是任何容器的子对象,那么show在背景中真正做了什么?