Прикрепление события двойного щелчка к метке - PullRequest
7 голосов
/ 28 апреля 2011

Как я могу прикрепить событие "нажал" к метке? Я попробовал GtkEventBox, но мне не повезло.

Ответы [ 4 ]

11 голосов
/ 29 апреля 2011

Подключение к сигналу button-press-event на EventBox.

10 голосов
/ 09 сентября 2012

Gtk # различает виджеты и «контейнеры». Большинство виджетов, помещенных в форму Gtk #, НЕ будут получать события щелчка мышью. Чтобы получить событие мыши, вам нужно поместить виджет в определенный контейнер - например, EventBox:

  1. Добавьте контейнер EventBox в вашу форму. Вы можете разместить его позади других виджетов или, так как он не виден, если вы не выбрали его (или не изменили цвет фона).

  2. Поместите виджет метки в этот EventBox. Обратите внимание, что метка получит форму и размер EventBox.

  3. Добавьте к этому EventBox сигнал ButtonPressEvent из «Сигналов общих виджетов».

Если вам нужно идентифицировать кнопку, которая была нажата при обработке этого события, используйте значение uint в: args.Event.Button, как правило, «1» будет левой кнопкой мыши, «2» центральной кнопкой и «3» правая кнопка («2» также может быть при нажатии левой и правой кнопок).

1 голос
/ 29 апреля 2011

2019-04-17 Обновление:

ptomato здесь прав, GtkLabel - это одно из исключений, которое действительно требует окна событий, поэтому вам следует подключиться к сигналу button-press-event окна событий. Для других виджетов API установки / добавления событий в моем исходном ответе должны быть по-прежнему актуальны.

Оригинальный (неправильный) ответ:

Подключитесь к сигналу события нажатия кнопки, но непосредственно к GtkLabel. Я бы сказал, что вам здесь не нужен набор событий, поскольку GtkLabel уже наследует этот сигнал от GtkWidget. Чтобы активировать GtkLabel для получения этих событий, сначала необходимо вызвать gtk_widget_set_events или gtk_widget_add_events и добавить чувствительность к событию GDK_BUTTON_PRESS_MASK * 1019.

0 голосов
/ 09 августа 2017

Кажется, вам вообще не нужен 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)

Документация говорит, что она должна использоваться только для реализации виджетов - но, эй, это работает. Кого волнует «должен»?

...