tsurushuuの日記

 | 

2011-11-23

gtk2hsのインストール

00:28

gtk2hsのインストールで、かなり手こずったので、以下に覚え書き。それにしても、すんなり通った試しが無い。。。

Windowsでインストール

00:41

Windowsでgtk2hsをインストールするのに手こずった。。

それにしても、HaskellGUI(とくにWindows)は、障壁が多いし、メンテナンスされていないものが多い。

以下に、対処方法の覚え書きを置いておきますが、この方法が正しいのかどうか不明なので、まずは、マニュアル通りにインストールするのが良いと思います。

http://www.haskell.org/haskellwiki/Gtk2Hs/Windows

cabal install glibで失敗

cabal install gtkの途中で失敗するが、細かく見ていくと、cabal install glibの途中で、pkg-configのバージョンがダメ、などとエラーが出る。

Gtk+のbinフォルダをPATHに追加することで対処出来たが、この方法で良いのかどうか不明

cabal install pangoで失敗

http://www.haskell.org/haskellwiki/Gtk2Hs/Windows この通りやっても、途中で失敗した。

検索したところ、以下のページを参考に、cabal unpack pango をして、ソース内の、 <glib/glib.h> を、 <glib.h> にしたらインストール成功

http://progandprog.blogspot.com/2011_04_01_archive.html


gladeのインストール

インストールしたGTK+の場所(パス)に、スペースが入っていると失敗する。。

(PKG_CONFIG_PATH に設定するGTK+のパスに、スペースが入っていると、cabal install gladeで、Cのライブラリが無いといわれる。)

(このことは、別のページのどこかに書いてあったと思うが、今となっては見つからない。)

exeの実行時に、dll内の関数が無いというエラー

古いGtkランタイムをインストールしてしまっていると、その中の同名dllを読んでしまっていて、エラーになる。

古いランタイムはアンインストールしておくべし。。

OSXでインストール

00:41

以下の、Homebrewを使う方法を参考にした。この際、Macportsはアンインストールした。

http://www.haskell.org/haskellwiki/Gtk2Hs/Mac

brew install gtk 途中でワーニングやエラー

    • use-clang オプションを付けて実行

その後、gtk-demoは成功したが、実際にはサンプルのビルドが出来ず。

cabal install gtk2hs-buildtoolsは成功しているが、cabal install gtkが失敗している模様。

どうやら、必要なバイナリにパスが通っていないらしい。

/Users/xxxx/Library/Haskell/bin にパスを通してから cabal install gtkで成功。

実行時

00:41

生成したgladeファイルの読み込み ( GtkBuilder vs Libglade )

このチュートリアルは、少し古い?

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)
			)


後で読む

http://www.muitovar.com/gtk2hs/index.html

ShojiShoji 2013/03/29 19:19 Very valid, pithy, sucincct, and on point. WD.

rwqyljujrwqyljuj 2013/03/31 22:38 2PZzeG , [url=http://oxviwjrbtcfv.com/]oxviwjrbtcfv[/url], [link=http://ztxsvybgiwfq.com/]ztxsvybgiwfq[/link], http://lflsdgvklrhf.com/

ゲスト



トラックバック - http://haskell.g.hatena.ne.jp/tsurushuu/20111123
リンク元
 |