我在我的 gtk2hs 应用程序中使用 Glade 创建了菜单。是否可以在我的 Haskell 代码中使用它来为每个激活的菜单项编写操作?是否有一个关于 Hackage 的简单示例或项目可以用作说明性示例?
我能找到的唯一菜单示例http://www.muitovar.com/gtk2hs/chap7-1.html似乎对使用 Gtk Builder XML 没有帮助。
我在我的 gtk2hs 应用程序中使用 Glade 创建了菜单。是否可以在我的 Haskell 代码中使用它来为每个激活的菜单项编写操作?是否有一个关于 Hackage 的简单示例或项目可以用作说明性示例?
我能找到的唯一菜单示例http://www.muitovar.com/gtk2hs/chap7-1.html似乎对使用 Gtk Builder XML 没有帮助。
这里有两个来自我的应用程序的例子。在主程序中,我将 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"
-- 使菜单项显示关于对话框(在 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
请注意,我将 Builder 对象传递给 showAboutDialog 因为该函数需要从 Glade 文件中获取对话框。