我正在使用haskell和gtk2hs。如何在haskell中获得keydown和keyup事件?
有没有办法让keydown/keyup事件(keystate是一样的好; keypress事件不是)与那些?
我正在使用haskell和gtk2hs。如何在haskell中获得keydown和keyup事件?
有没有办法让keydown/keyup事件(keystate是一样的好; keypress事件不是)与那些?
这些进口将是必要的
import Graphics.UI.Gtk.Abstract.Widget
import Graphics.UI.Gtk.Gdk.Events
那么这是怎么到keyRelease活动(一些简单的例子)回应:
let handler event = do
case event of
(Key _ _ _ _ _ _ _ _ _ (Just char)) -> case char of
'a' -> doSomething
_ -> return() --or whatever type the other cases have
_ -> return()
return True
onKeyRelease widget handler
许多忽略模式将包含不适合基本信息简单的事件处理程序。
这里是如何的一个关键的状态可以被追踪:
isPressedA <- newIORef False
let handler event = do
case event of
(Key released _ _ _ _ _ _ _ _ (Just char)) -> case char of
'a' -> writeIORef isPressedA (not released)
_ -> return()
_ -> return()
return True
onKeyPress window handler
onKeyRelease window handler
释放的包含密钥是否被释放或按压,将相同的处理可以为这两个事件的工作。
我做了这个代码来响应窗口的关键事件,而不是一些小部件,避免了按键和keyRelease不同部件注册
获得在keyDown(切换事件之间的窗口时,它仍然是可能的,虽然)事件可以通过追踪自上次keyPress以来是否存在keyRelease来完成。
嗨,我试图用你的解决方案来获取任何关键事件,但我不知道如何使用Cabal来安装Graphics.UI.Gtk.Abstract.Widget和Events。没有找到包裹名称,你能帮我吗?此外,这部分代码继续在Main上,对吧?谢谢 – alitalvez
http://hackage.haskell.org/package/gtk-0.14.6/docs/Graphics-UI-Gtk-Abstract-Widget.html#v:onKeyRelease? – leftaroundabout
工作。没有找到它。 –
好。考虑自己张贴您的解决方案作为答案;这可能对其他人非常有用。 – leftaroundabout