2012-05-02 7 views
3

У меня есть меню, созданные с помощью Glade в моем приложении gtk2hs. Возможно ли использовать это в моем коде Haskell для записи действий для каждого активированного пункта меню? Есть ли простой пример где-то или проект в Hackage, который можно использовать в качестве иллюстративного примера?Можно ли использовать меню, созданные с помощью Glade в gtk2hs?

Единственный пример меню, который я смог найти http://www.muitovar.com/gtk2hs/chap7-1.html, похоже, не помогает работать с XML Gtk Builder.

ответ

3

Здесь два примера из моего приложения. В основном я привязываю виджеты GTK к переменным, а также к функциям обратного вызова, которые я реализую в других модулях.

--to загрузить файл 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" 

- сделать пункт меню показать О диалоге (определенного в файле Glade)

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

Большое спасибо! Это действительно помогло мне разобраться с графическим интерфейсом в моем проекте. – donatello