gpt4 book ai didi

haskell - 是否可以在 gtk2hs 中使用 Glade 创建的菜单?

转载 作者:行者123 更新时间:2023-12-01 01:18:56 25 4
gpt4 key购买 nike

我在我的 gtk2hs 应用程序中使用 Glade 创建了菜单。是否可以在我的 Haskell 代码中使用它来为每个激活的菜单项编写操作?是否有一个关于 Hackage 的简单示例或项目可以用作说明性示例?

我能找到的唯一菜单示例http://www.muitovar.com/gtk2hs/chap7-1.html似乎对使用 Gtk Builder XML 没有帮助。

最佳答案

这里有两个来自我的应用程序的例子。在主程序中,我将 GTK 小部件绑定(bind)到变量,并将这些小部件绑定(bind)到我在其他模块中实现的回调函数。

-- 加载 Glade 文件:

gui <- builderNew
builderAddFromFile gui "myGUI.glade"

-- 关闭应用程序:

-- 将窗口“mainWindow”(在 Glade 文件中定义)绑定(bind)到一个变量
mainWindow <- builderGetObject gui castToWindow "mainWindow"

-- 将菜单项“menu_Quit”(在 Glade 文件中定义)绑定(bind)到一个变量
mQuit <- builderGetObject gui castToMenuItem "menu_Quit"

-- 将菜单项绑定(bind)到 GTK 函数“widgetDestroy”
on mQuit menuItemActivate $ widgetDestroy mainWindow

-- 将 mainWindow 的事件 "objectDestroy"绑定(bind)到 GTK 函数 "mainQuit"
on mainWindow objectDestroy mainQuit

-- 当用户选择另一个菜单项时调用一个函数,说“menu_About”:

-- 将菜单项绑定(bind)到变量
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 block 放在一个函数中,也许在一个模块中,您可以在其中定义对 GTK 事件的所有响应:
showAboutDialog :: Builder -> IO ()
showAboutDialog gui = [insert do block here]

然后,您可以将 menuItemActivate 之后的 do block 替换为:
on mAbout menuItemActivate $ showAboutDialog gui

请注意,我将 Builder 对象传递给 showAboutDialog 因为该函数需要从 Glade 文件中获取对话框。

关于haskell - 是否可以在 gtk2hs 中使用 Glade 创建的菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10421470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com