如何将“点击”事件附加到标签上?我试过GtkEventBox,但没有运气。
连接到EventBox上的button-press-event
信号。
Gtk#区分Widgets和'Containers'。放置在Gtk#表单上的大多数小部件都不会收到鼠标单击事件。为了接收鼠标事件,您需要将窗口小部件放在特定容器中 - 如EventBox:
如果您需要识别处理此事件时单击的按钮,请使用以下位置的uint值:args.Event.Button通常“1”将是鼠标左键,“2”是中心按钮,“3”是右键(单击左右按钮时也可能是'2')。
2019-04-17更新:
ptomato在这里是正确的,GtkLabel
是确实需要一个事件框的例外之一,所以你应该连接到事件框的button-press-event
信号。对于其他小部件,我原始答案中的set / add events API应该仍然相关。
原(错)答案:
连接到按钮按下事件信号,但直接在GtkLabel上。我说你不需要这里的事件盒,因为GtkLabel已经从GtkWidget继承了这个信号。要使GtkLabel能够接收这些事件,首先需要调用gtk_widget_set_events或gtk_widget_add_events,并将灵敏度添加到GDK_BUTTON_PRESS_MASK事件中。
看起来你根本不需要EventBox:既然问题是标签没有任何关联的X11窗口,那就用set_has_window(True)
给它一个!以下适用于我:
self.label = Gtk.Label()
self.label.set_has_window(True)
self.label.set_events(Gdk.EventMask.BUTTON_PRESS_MASK)
self.label.connect("button-press-event", self.click_label)
documentation说它应该只用于实现小部件 - 但是,嘿,它的工作原理。谁在乎“应该”?