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

5
如何在Haskell中模拟/欺骗按键事件?
我在我的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

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

很少使用的函数。此函数用于在小部件上发射事件信号(如果不使用此函数,则永远不应该发射这些信号)。如果您想合成事件,请勿使用此函数;而是使用mainDoEvent,以便事件的行为就像在事件队列中一样。

因此,我查看了Graphics.UI.Gtk.General.General中的mainDoEvent :: EventM t (),但不确定如何使用EventM来创建按键事件,并且找不到mainDoEvent的使用示例。有人能指导我如何使用EventM创建按键事件并将其传递给mainDoEvent或其他方法吗?谢谢。


5
这个问题可能更多地涉及GTK而不是Haskell。在这种情况下,可以通过一个简单的FFI包装器来公开底层API,详情请参见此处 - C. A. McCann
1个回答

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接