0

以下は、ラベルを追加してからクリックハンドラーを追加する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
4

3 に答える 3

2

そのためにイベントボックスを使用したいとします。これは、イベントをキャプチャするコンテナです。

これが機能するバージョンです。

{-# 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
于 2011-03-15T10:06:36.570 に答える
0

GTKのドキュメントによると、ラベルからボタンが押されるなどの信号はありません。

そうですね、そういうことにはボタンを使うことになっていると思います。ただし、確かに、gtk2hsはより厳密に型指定され、それをキャッチすることができます。

または、ラベルテキストにリンクを追加してから、適切なシグナルを上書きすることもできます。

于 2011-02-26T14:39:25.030 に答える
0

ラベルを選択可能にします。

set label0 [labelSelectable := True]
于 2011-02-27T00:17:00.277 に答える