如何防止Gtk小部件被;“灰显”;何时设置为不敏感?

如何防止Gtk小部件被;“灰显”;何时设置为不敏感?,gtk,gtk3,vala,Gtk,Gtk3,Vala,我正在使用一个Gtk EventBox,它保存一个图像以接收图像上的鼠标单击事件。单击图像后,EventBox将设置为不敏感。但是,由于这会导致EventBox“灰显”,因此图像的颜色也会变浅。我真的不喜欢这个。有没有办法禁用Gtk小部件的这种行为 代码示例: var ebox = new EventBox (); var img = new Image (); img.set_from_file ("my_image.png"); img.show (); ebox.add (img); e

我正在使用一个Gtk EventBox,它保存一个图像以接收图像上的鼠标单击事件。单击图像后,EventBox将设置为不敏感。但是,由于这会导致EventBox“灰显”,因此图像的颜色也会变浅。我真的不喜欢这个。有没有办法禁用Gtk小部件的这种行为

代码示例:

var ebox = new EventBox ();
var img = new Image ();
img.set_from_file ("my_image.png");
img.show ();
ebox.add (img);

ebox.button_press_event.connect ( () => { ebox.set_sensitive (false); return true; } );

您可以对小部件进行子类化,添加一个虚拟方法do_draw(),然后在那里绘制您的图像。

您可以对小部件进行子类化,添加一个虚拟方法do_draw(),然后在那里绘制您的图像。

为什么不阻止或断开事件处理程序,而不是使小部件不敏感?@绘制它会使其更加复杂,而且由于该方法存在,我认为这就是解决问题的方法。好吧,所以我决定继续阻塞和取消阻塞信号处理程序。由于很难找到Vala Gtk代码示例,下面是我大致使用的:
handler\u id=ebox.button\u press\u event.connect(()=>{callback\u function();return true;});GLib.SignalHandler.block(ebox,handler\u id);GLib.SignalHandler.unblock(ebox,handler\u id)为什么不阻止或断开事件处理程序,而不是使小部件不敏感?@绘制它会使它变得更复杂,而且由于该方法存在,我认为这是解决问题的方法。好的,所以我决定阻止并取消阻止信号处理程序。由于很难找到Vala Gtk代码示例,下面是我大致使用的:
handler\u id=ebox.button\u press\u event.connect(()=>{callback\u function();return true;});GLib.SignalHandler.block(ebox,handler\u id);GLib.SignalHandler.unblock(ebox,handler\u id)