以下を参考にしました。
module Main where
import Graphics.UI.WX
import Graphics.UI.WXCore
main :: IO ()
main = start gui
gui :: IO ()
gui = do
form <- frame [text := "コントロール"]
p <- panel form []
textlog <- textCtrl p [enabled := True, wrap := WrapNone]
textCtrlMakeLogActiveTarget textlog
logMessage "ログの記録を開始します。"
ok <- button p [text := "OK", on command := appendText textlog "OKボタンが押されました。\n"]
quit <- button p [text := "終了", on command := close form]
let rlabels = ["第一", "第二", "第三"]
radioBox <- radioBox p Horizontal rlabels [text := "横並び", on select ::= logSelect]
disableButton <- button p [text := "無効", on command ::= onEnable radioBox]
set form [layout :=
container p $
column 0
[( margin 10 $ row 7 [widget radioBox ,
widget disableButton ,widget ok, widget quit])
, hfill $ minsize (sz 400 150) $ widget textlog ]
, clientSize := sz 400 200 ]
return ()
where
logSelect w = do
i <- get w selection
s <- get w (item i)
logMessage ("selected index: " ++ show i ++ ": " ++ s)
onEnable w b = do
set w [enabled :~ not]
enable <- get w enabled
set b [text := (if enable then "無効" else "有効")]