如何更改Gtk.EventBox中显示的图像?
我正在尝试用GTK和Vala实现一个可点击的图像。据我所知,最好的方法是使用EventBox。但是,我的要求之一是更改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 ();
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在背景中真正做了什么?