如何在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
或其他一些方法来执行此操作?感谢。
答案 0 :(得分:1)
生成事件是错误的方式。相反,您应该使用文本小部件的相应功能插入文本。例如,对于TextBuffer
s,请使用textBufferInsertAtCursor。