将双击事件附加到标签

时间:2011-04-28 16:52:05

标签: events gtk signals

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

4 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:9)

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

  1. 向表单添加EventBox包含。您可以将其置于其他窗口小部件后面或因为它不可见,除非您专门选择它(或更改其背景颜色)。

  2. 将标签小部件放在此EventBox中。请注意,标签将获得EventBox的形状和大小。

  3. 在“Common Widget Signals”中添加信号'ButtonPressEvent'到此EventBox。

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

答案 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事件中。

答案 3 :(得分: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说它应该只用于实现小部件 - 但是,嘿,它的工作原理。谁在乎“应该”?

相关问题