下面是一个使用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
答案 0 :(得分: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
答案 1 :(得分:0)
The GTK docs say没有像标签发出的按钮按下这样的信号。
正确的,我会说,你应该使用按钮来做这些事情。不可否认,gtk2hs可以更严格地输入并抓住它。
或者,您可以添加指向标签文本的链接,然后覆盖相应的信号。
答案 2 :(得分:0)
使标签可选:
set label0 [labelSelectable := True]