2011-07-14 38 views
5

如何在Haskell中模拟/欺骗按键事件?如何在Haskell中模拟/欺骗按键事件?

我在我的Gui中有一个屏幕上的数字键盘,我想用它来写入窗口中的多个文本entrys。小键盘由按钮小部件组成,我想要做的是让onButtonClicked处理程序发送keyPressEvent,以便将适当的字符/数字写入具有焦点的文本条目中。我开始寻找Graphics.UI.Gtk.Gdk.Events并做了按键事件

Event my1Event = Key True True Graphics.UI.Gtk.Gdk.Events.currentTime [] False False False 0xffb1 "KP_1" Nothing 

我无法弄清楚如何调度此事件。无论如何事实证明,Event已被弃用,应该使用EventM。我在Graphics.UI.Gtk.Abstract.Widget找到了widgetEvent :: WidgetClass self => self -> EventM t Bool。在它的API说:

很少使用的功能。该功能用于发送小部件上的事件信号(如果不使用此功能,则不应该发射这些信号)。如果你想综合一个事件,不要使用这个函数;相反,使用mainDoEvent,这样事件的行为就好像它在事件队列中一样。

所以我看着mainDoEvent :: EventM t()Graphics.UI.Gtk.General.General但我不确定如何使用EventM创建一个按键,但没有找到的使用mainDoEvent一个例子。任何人都可以告诉我如何使用EventM创建按键事件并将其传递给mainDoEvent或其他方式来执行此操作?谢谢。

+5

这个问题可能比Haskell更多关于GTK。请参阅[这里](http://developer.gnome.org/gtk/2.24/gtk-General.html#gtk-main-do-event)以了解底层API,它似乎通过一个简单的FFI包装器暴露于此案件。 –

回答

1

生成事件是错误的方法。相反,您应该使用适合您的文本小部件的功能来插入文本。例如,对于TextBuffer s,请使用textBufferInsertAtCursor