0

私はgtk2hsとgladeを使用してGUIを作成し、main::IO(). 次に、ウィンドウのラベルボタン、およびエントリ テキストのコーディングを行います。例えば、

entry         <- xmlGetWidget xml castToEntry "entry1"
applyButton   <- xmlGetWidget xml castToButton "button1"

次に、適用ボタンをクリックした後

onClicked applyButton $ do
number <- get entry entryText

変数に値を渡しました

次に、このように数値を二乗する関数を書きました

sqr :: Int -> Int -> IO ()
sqr number = number * number

mainGUIの後。

うまくいかない!!!!!!!!

として動作するはずです

I/p: GUI でユーザーから番号を取得する

o/p: GUI に表示される数値の 2 乗

4

1 に答える 1

1

さて、あなたは IO と計算部分を一緒に混ぜているようです。

次のように、必要な計算を行うための純粋な関数があります。

sqr :: Int -> Int -> Int
sqr number = number * number

また、IO アクションを発行してイベントに対応する必要があります。つまり、GUI 要素の状態を更新する必要があります。値を同じエントリに出力しようとしていると思います。

onClicked applyButton $ do
  num_str <- entryGetText entryText
  let number = read num_str
      squared = sqr number
  entrySetText entryText (show squared)

entryGetText/SetText は文字列で動作するため、Int との間で変換する必要があることに注意してください。

于 2012-08-01T19:17:22.377 に答える