5

私は現在、本「The Haskell School of Expression」の演習に従っており、グラフィックスの作成に関する第 3 章に到達しました。この本ではSOEGraphicsモジュールを使用し、ウィンドウに簡単なテキストを描画してから、ボタンを押してウィンドウを閉じる方法を示しています。

ただし、コンパイルして実行すると、画面にテキストが表示されたウィンドウが表示されますが、どのキーを押しても、フォーカスがコマンドラインにあるかウィンドウ自体にあるかに関係なく、ウィンドウが閉じることを拒否することがわかりました。

本のソースコードは次のとおりです。

module Main where
import SOE
main =  runGraphics(
        do  w <- openWindow
                "My First Graphics Program" (300, 300)
            drawInWindow w (text(100,200) "HelloGraphicsWorld")
            k <- getKey w
            closeWindow w
        )

ウィンドウを閉じる唯一の方法は、CTRL-C でウィンドウを強制終了することです。私のコードで見落としているものはありますか? このプログラムは GHC 7.4.1 を使用してコンパイルされ、Ubuntu で実行されました。

4

3 に答える 3

2

getKeyCharの代わりに試してみてくださいgetKey。推奨される使用方法や特定の OS での動作に変更があったようです。

于 2013-01-20T03:58:47.660 に答える
0

質問の日付の約 9 か月前にリリースされた SOE パッケージの現在のリリースを使用しています。質問のポスターのように、Ubuntu (12.04) で GHCi 7.4.1 を実行しています。私はこの同じ問題に遭遇しましたが、DuckMaestro の答えは当てはまりませんでした:

getKeyCharSOE パッケージのどのモジュールにも定義されていません。ただし、次のgetKeyExとおりです。

getKeyEx :: Window -> Bool -> IO Char

SOE パッケージ自体には記載されていませんが、この関数はモジュール内で同名のものをエミュレートしているようです。Graphics.HGL.Utils

ただし、getKeySOE モジュールからエクスポートされているのに対し、そうでgetKeyExはありません。

キープレスイベントでコンパイルしてウィンドウを閉じるには

  1. getKeyExSOE モジュールからエクスポート
  2. 質問で引用されたコードで、に変更されk <- getKey wましたk <- getKeyEx w True
于 2013-02-04T08:01:30.607 に答える