4

gtk2hsアプリケーションでGladeを使用して作成されたメニューがあります。Haskellコードでこれを使用して、アクティブ化された各メニュー項目のアクションを記述できますか?実例として使用できるハッキングに関する簡単な例やプロジェクトはどこかにありますか?

私が見つけた唯一のメニュー例http://www.muitovar.com/gtk2hs/chap7-1.htmlは、GtkBuilderXMLでの作業に役立たないようです。

4

1 に答える 1

4

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

--Gladeファイルをロードするには:

gui <- builderNew
builderAddFromFile gui "myGUI.glade"

-アプリケーションを閉じるには:

--ウィンドウ「mainWindow」(Gladeファイルで定義)を変数にバインドします

mainWindow <- builderGetObject gui castToWindow "mainWindow"

--メニュー項目「menu_Quit」(Gladeファイルで定義)を変数にバインドします

mQuit <- builderGetObject gui castToMenuItem "menu_Quit"

--メニュー項目をGTK関数「widgetDestroy」にバインドします

on mQuit menuItemActivate $ widgetDestroy mainWindow

--mainWindowのイベント「objectDestroy」をGTK関数「mainQuit」にバインドします

on mainWindow objectDestroy mainQuit

-ユーザーが別のメニュー項目を選択したときに関数を呼び出すには、「menu_About」と言います。

--メニュー項目を変数にバインドします

mAbout <- builderGetObject gui castToMenuItem "menu_About"

--メニュー項目にAboutダイアログ(Gladeファイルで定義)を表示させます

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

doブロックを関数に配置することもできます。おそらく、GTKイベントへのすべての応答を定義するモジュールに配置することもできます。

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

次に、menuItemActivateの後のdoブロックを次のように置き換えることができます。

on mAbout menuItemActivate $ showAboutDialog gui

その関数はGladeファイルからダイアログを取得する必要があるため、BuilderオブジェクトをshowAboutDialogに渡すことに注意してください。

于 2012-05-03T22:29:18.767 に答える