Здесь два примера из моего приложения. В основном я привязываю виджеты 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.
Большое спасибо! Это действительно помогло мне разобраться с графическим интерфейсом в моем проекте. – donatello