我如何聚焦一个小部件?

How do I focus a widget?

当我启动我的应用程序时,我想将焦点设置在某个按钮上。目前我需要点击 tab 一次才能使按钮聚焦。

wxwidgets 文档提到了 SetFocus 方法 (link),但在 wxhaskell?

中似乎不可用

然后我找到了 MoveBeforeInTabOrder (link) 但同样,我没有在 wxhaskell 中找到它。

wxhaskell mentioned 的维护者,它是 2009 年的 'fairly complete GUI binding' 所以我只是在这里遗漏了一些东西还是运气不好?

这是我的最小示例:

module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start hello

hello :: IO ()
hello = do
  f <- frame []
  test <- button f [ text := "button" ]
  set f [ layout := widget test ]

wx 库有一个 focusOn function 可以让你专注于一个控件。

它是 wxcore's windowSetFocus. The type is a bit misleading: it says Window a, but it works for buttons because they are windows too 的 re-export。

以下作品(注意我只加了最后一行):

module Main where

import Graphics.UI.WX
import Graphics.UI.WXCore

main :: IO ()
main = start hello

hello :: IO ()
hello = do
  f <- frame []
  test <- button f [ text := "button" ]
  set f [ layout := widget test ]
  focusOn test                          -- Here!