将双击事件附加到标签

问题描述 投票:7回答:4

如何将“点击”事件附加到标签上?我试过GtkEventBox,但没有运气。

events gtk signals
4个回答
11
投票

连接到EventBox上的button-press-event信号。


10
投票

Gtk#区分Widgets和'Containers'。放置在Gtk#表单上的大多数小部件都不会收到鼠标单击事件。为了接收鼠标事件,您需要将窗口小部件放在特定容器中 - 如EventBox:

  1. 在表单中添加一个Event Box容器。您可以将其置于其他窗口小部件后面或因为它不可见,除非您专门选择它(或更改其背景颜色)。
  2. 将标签小部件放在此EventBox中。请注意,标签将获得EventBox的形状和大小。
  3. 将“Bu​​ttonPressEvent”信号添加到此EventBox中的“Common Widget Signals”。

如果您需要识别处理此事件时单击的按钮,请使用以下位置的uint值:args.Event.Button通常“1”将是鼠标左键,“2”是中心按钮,“3”是右键(单击左右按钮时也可能是'2')。


1
投票

2019-04-17更新:

ptomato在这里是正确的,GtkLabel是确实需要一个事件框的例外之一,所以你应该连接到事件框的button-press-event信号。对于其他小部件,我原始答案中的set / add events API应该仍然相关。

原(错)答案:

连接到按钮按下事件信号,但直接在GtkLabel上。我说你不需要这里的事件盒,因为GtkLabel已经从GtkWidget继承了这个信号。要使GtkLabel能够接收这些事件,首先需要调用gtk_widget_set_eventsgtk_widget_add_events,并将灵敏度添加到GDK_BUTTON_PRESS_MASK事件中。


0
投票

看起来你根本不需要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说它应该只用于实现小部件 - 但是,嘿,它的工作原理。谁在乎“应该”?

© www.soinside.com 2019 - 2024. All rights reserved.