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

时间:2011-07-14 16:10:23

标签: events haskell gtk keypress

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

我的Gui中有一个屏幕数字键盘,我想用它来写入窗口中的一些文本。键盘由按钮小部件组成,我想要做的是让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

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

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

因此,我查看了mainDoEvent :: EventM t ()中的Graphics.UI.Gtk.General.General,但不确定如何使用EventM创建按键,但无法找到正在使用的mainDoEvent示例。任何人都可以建议我如何使用EventM创建一个按键事件并将其传递给mainDoEvent或其他一些方法来执行此操作?感谢。

1 个答案:

答案 0 :(得分:1)

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