2012-05-02 4 views
3

gtk2hsアプリケーションにGladeで作成したメニューがあります。 Haskellのコードでこれを使用して、起動されたメニュー項目ごとにアクションを記述することは可能ですか?説明的な例として使用できるHackageのどこかの簡単な例がありますか?Gladeで作成したメニューをgtk2hsで使用することはできますか?

http://www.muitovar.com/gtk2hs/chap7-1.htmlという唯一のメニュー例は、Gtk Builder XMLを使用するのに役立たないようです。

答えて

3

ここでは、私のアプリケーションからの2つの例を示します。メインでは、GTKウィジェットを変数にバインドし、他のモジュールで実装するコールバック関数にバインドします。 - 変数

へ(グレイドファイルで定義されている)ウィンドウ "メインウィンドウ" を結合し

:アプリケーションを終了するには -

gui <- builderNew 
builderAddFromFile gui "myGUI.glade" 

グレイドファイルをロード--to

mainWindow <- builderGetObject gui castToWindow "mainWindow" 

- 変数

mQuit <- builderGetObject gui castToMenuItem "menu_Quit" 
にメニュー項目(グレイドファイルで定義された) "menu_Quit" をバインドします

- GTK関数に "widgetDestroy"

on mQuit menuItemActivate $ widgetDestroy mainWindow 

をメニュー項目をバインド - GTK関数に

on mainWindow objectDestroy mainQuit 

を "mainQuitを" メインウィンドウのイベント "objectDestroyを" バインド - 呼び出すには機能、ユーザーが別のメニュー項目を選択すると、「menu_About」と言う:

- 変数

にメニュー項目をバインド

- メニュー項目が

on mAbout menuItemActivate $ do 
    aboutDialog <- builderGetObject gui castToDialog "aboutDialog" 
    set aboutDialog [ widgetVisible := True ] 
    dialogRun aboutDialog 
    set aboutDialog [ widgetVisible := False ] 

あなたは多分あなたはGTKへの応答すべてを定義するモジュールで、関数内で行うブロックを置くことができる(グレイドファイルで定義された)ダイアログについて示して作りますイベント:

showAboutDialog :: Builder -> IO() 
showAboutDialog gui = [insert do block here] 

は、次に、あなただけでmenuItemActivate後にインクルードは、ブロックを行う置き換えることができ:

on mAbout menuItemActivate $ showAboutDialog gui 

BuilderオブジェクトをshowAboutDialogに渡すのは、その関数がGladeファイルからダイアログを取得する必要があるためです。

+0

ありがとうございました!これは私のプロジェクトでGUIを手に入れるのに本当に役立っています。 – donatello

関連する問題