Как узнать, нажата ли кнопка мыши на виджете (или контейнере) в виде метки в gtk2hs? - PullRequest
0 голосов
/ 26 февраля 2011

Ниже приведен простой пример использования gtk2hs, который добавляет метку, а затем обработчик щелчка по ней.Обработчик buttonPressEvent никогда не вызывается при нажатии на метку.Кнопка может быть помещена в контейнер, но ... контейнеры запускают сигнал нажатия кнопки?

У меня есть прямоугольная область, в которой есть какой-то текст (в настоящее время используется метка), который мне нужно знать, еслипользователь нажал на него.Я не хочу, чтобы это выглядело как кнопка.

{-# LANGUAGE PackageImports #-}

import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.EventM
import Graphics.UI.Gtk.Gdk.GC
import "mtl" Control.Monad.Trans(liftIO)

main = do
  initGUI
  window <- windowNew
  window `onDestroy` mainQuit

  label0 <- labelNew $ Just "static label"
  widgetAddEvents label0 [ButtonPressMask] -- is this necessary? Still doesn't work with it, though
  label0 `on` buttonPressEvent $ tryEvent $ do
    liftIO $ putStrLn "static label clicked"
  containerAdd window label0

  widgetShowAll window
  mainGUI

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

Вы хотите использовать для этого поле событий.Это контейнер, который захватывает события.

Вот версия, которая работает.

{-# LANGUAGE PackageImports #-}

import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.EventM
import Graphics.UI.Gtk.Gdk.GC
import "mtl" Control.Monad.Trans(liftIO)

main = do
  initGUI
  window <- windowNew
  window `onDestroy` mainQuit

  label0 <- labelNew $ Just "static label"

  eventBox0 <- eventBoxNew
  eventBox0 `on` buttonPressEvent $ tryEvent $ do
    liftIO $ putStrLn "static label clicked"

  containerAdd eventBox0 label0
  containerAdd window eventBox0

  widgetShowAll window
  mainGUI
0 голосов
/ 27 февраля 2011

Сделать метку доступной для выбора:

set label0 [labelSelectable := True]
0 голосов
/ 26 февраля 2011

Документы GTK говорят , что такого сигнала, как нажатие кнопки, испускаемое метками, не существует.

Правильно, я бы сказал, вы должны использовать кнопки для таких вещей. Правда, gtk2hs можно было бы набрать более строго и поймать это.

В качестве альтернативы, вы можете добавить ссылки к тексту вашей метки и затем переопределить соответствующие сигналы.

...