使用 haskell-gi GTK 信号
Using haskell-gi GTK signals
Haskell 这里是 Gi-GTK 菜鸟。和一般的 GTK 菜鸟。
我有一张图片,我已将其包装在事件框中。现在,我想检测用户何时按下事件框(鼠标按下)。一些谷歌搜索指向我使用 button-press-event
。我的代码如下。
drag <- imageNewFromFile "rszh.png"
dragevents <- eventBoxNew
containerAdd dragevents drag
set dragevents [widgetHalign := AlignEnd, widgetValign := AlignEnd]
onWidgetButtonPressEvent dragevents (print "Hello world")
并且 GHC 无法通过以下神秘错误消息编译它:
panedraggin.hs:30:42: error:
• Couldn't match type ‘IO ()’
with ‘GI.Gdk.Structs.EventButton.EventButton -> IO Bool’
Expected type: GI.Gtk.Objects.Widget.WidgetButtonPressEventCallback
Actual type: IO ()
• Possible cause: ‘print’ is applied to too many arguments
In the second argument of ‘onWidgetButtonPressEvent’, namely
‘(print "Hello world")’
In a stmt of a 'do' block:
onWidgetButtonPressEvent dragevents (print "Hello world")
In the expression:
do { Gtk.init Nothing;
window <- windowNew WindowTypeToplevel;
onWidgetDestroy window mainQuit;
windowMaximize window;
.... }
我做错了什么?
嗯,错误消息已经说明了:它需要一个类型为 EventButton -> IO Bool
的函数,而 print "Hello world"
的类型为 IO ()
.
不过,您可以轻松地将其转换为一个,方法是:
onWidgetButtonPressEvent dragevents (<b>const $</b> print "Hello world"<b> >> return True</b>)
因此,通过使用 const $
,我们暂时忽略 EventButton
参数(稍后您可以决定考虑事件参数),并且通过使用 >> return True
,我们确保打印后,我们 return True
(意味着回调成功)。
Haskell 这里是 Gi-GTK 菜鸟。和一般的 GTK 菜鸟。
我有一张图片,我已将其包装在事件框中。现在,我想检测用户何时按下事件框(鼠标按下)。一些谷歌搜索指向我使用 button-press-event
。我的代码如下。
drag <- imageNewFromFile "rszh.png"
dragevents <- eventBoxNew
containerAdd dragevents drag
set dragevents [widgetHalign := AlignEnd, widgetValign := AlignEnd]
onWidgetButtonPressEvent dragevents (print "Hello world")
并且 GHC 无法通过以下神秘错误消息编译它:
panedraggin.hs:30:42: error:
• Couldn't match type ‘IO ()’
with ‘GI.Gdk.Structs.EventButton.EventButton -> IO Bool’
Expected type: GI.Gtk.Objects.Widget.WidgetButtonPressEventCallback
Actual type: IO ()
• Possible cause: ‘print’ is applied to too many arguments
In the second argument of ‘onWidgetButtonPressEvent’, namely
‘(print "Hello world")’
In a stmt of a 'do' block:
onWidgetButtonPressEvent dragevents (print "Hello world")
In the expression:
do { Gtk.init Nothing;
window <- windowNew WindowTypeToplevel;
onWidgetDestroy window mainQuit;
windowMaximize window;
.... }
我做错了什么?
嗯,错误消息已经说明了:它需要一个类型为 EventButton -> IO Bool
的函数,而 print "Hello world"
的类型为 IO ()
.
不过,您可以轻松地将其转换为一个,方法是:
onWidgetButtonPressEvent dragevents (<b>const $</b> print "Hello world"<b> >> return True</b>)
因此,通过使用 const $
,我们暂时忽略 EventButton
参数(稍后您可以决定考虑事件参数),并且通过使用 >> return True
,我们确保打印后,我们 return True
(意味着回调成功)。