【问题标题】:How to emulate/spoof keypress event in Haskell?如何在 Haskell 中模拟/欺骗按键事件?
【发布时间】:2011-07-14 16:10:22
【问题描述】:

如何在 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 或其他方式来执行此操作?谢谢。

【问题讨论】:

  • 这个问题可能更多是关于 GTK 而不是 Haskell。请参阅here 了解底层 API,在这种情况下,它似乎是通过一个简单的 FFI 包装器公开的。

标签: events haskell gtk keypress


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 2020-09-14
    • 2023-03-24
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多