|
|
||
このチュートリアルは、少し古い?
GtkBuilder で作成されたファイルは、上記のチュートリアルの方法では実行出来ない。(※ 対応していないものだと思っていたが、実は、別の方法で実行可能だということが後で判明。。 )
Gladeでプロジェクトを新規作成する際に、設定ダイアログが表示される。ここで、「プロジェクト・ファイルの形式」という設定にて、「GtkBuilder」と「Libglade」が選択できて、ここで、「Libglade」を選択する必要がある。この設定をしないと、xmlNew で読み込む際にワーニングと同時に失敗してしまう。(意味はよくわからないが。)
Just xml <- xmlNew "hellogtk2hs.glade"
もし、間違った設定でGladeのプロジェクトを作成してしまっていても、「編集」>「設定」で設定出来る。
GtkBuilderのファイルの場合は、下記を参考にすれば、ちゃんと使える。
先ほどのチュートリアルにて、練習問題として、「リターンキーで処理する」というお題があったので、挑戦していたら、これも、時間がかかってしまった。
チュートリアル内で、既に登場している、onDestroy などと同じ階層に、onKeyPressというのがあるが、ここでは、(Event -> IO Bool)という関数が必要。ここで、受け取ったキーイベントが、どのようなキーが押されているのかを判定する処理が必要。 eventKeyName で、どのキーなのかを調べることが出来るが、この名前が、何かと衝突している。import する際に、as で別名をつけるのが簡単な方法。
import Graphics.UI.Gtk.Gdk.Events as GdkE let set_name entry label = do name <- get entry entryText set label [labelText := "Hello " ++ name] onClicked applyButton $ do set_name entry label onKeyPress window $ (\x -> do case (GdkE.eventKeyName x) of "Return" -> set_name entry label "Escape" -> widgetDestroy window name -> return () -- print name return (GdkE.eventSent x) )