如何向非 gtk、非 qt 的 python 应用程序添加对全局菜单的支持?

如何向非 gtk、非 qt 的 python 应用程序添加对全局菜单的支持?

我正在寻找有关如何向非 gtk、非 qt 应用程序添加全局菜单支持的良好文档(示例、教程或指南)。(在 gtk 中,它对主菜单“神奇地”起作用...)。我想要使用的工具包是猕猴桃,它支持 glib-mainloop(例如用于 gstreamer),因此原则上所有内容都应该在那里工作。

我已经看到了 API 参考总线菜单这里,但这对于理解机制没有多大帮助。

有一个创建启动器快捷列表其中包含 dbus-menu,但不包含 global-menu / appmenu。

有一个维基页面除了“欢迎致力于支持其他工具包上的其他应用程序菜单,但这不是 DX 团队的优先事项,需要帮助”之外,不包含任何相关信息。

该图中包含一些来自 indicator-appmenu 源代码的信息,但这些信息还不够,在 developer.ubuntu.com 上找不到,需要更多解释:

在此处输入图片描述

所以:

  • 获取一组菜单项(Dbusmenu.Menuitem)以进行显示的程序是什么?
  • 客户端和服务器扮演什么角色?(哪一个应该在我的应用程序中运行?或者两者兼而有之?)

类似问题

答案1

一般情况下,我建议使用工具包支持的方式将菜单放入全局菜单栏中……但是,我认为现在说服您已经太晚了 :-) 另外,我要指出的是,即使我们在 12.04 中使用 Dbusmenu 和注册,目标是在 14.04 之前转移到 GMenuModel 并用其菜单标记窗口,因此这些信息将过时。当然,工具包插件将更新 ;-)(我保证,最后一次尝试)

所涉及的基本原理是,我们需要知道哪些菜单与哪个窗口相关联。我们使用窗口的 XID 来跟踪窗口,菜单是 DBus 上 Dbusmenu 服务器的路径。您需要这两条信息才能注册。注册界面是相当简单基本上,您将这两条信息都传递给注册商。注册商在 DBus 上的知名名称是com.canonical.AppMenu.Registrar

有关其工作原理的示例,您可以查看mock-json-app 示例代码那是指示器-应用菜单。这是一个小工具,它将获取 dbusmenu-dumper 输出的 JSON 文件(位于libdbusmenu 工具) 并创建一个声称拥有该菜单的窗口。它还可以处理诸如应用程序菜单崩溃之类的问题,这对于大多数应用程序来说可能不是真正需要的(尽管在开发中确实很重要 :-) )。

要创建一个Dbusmenu 服务器你基本上只需要分配对象并告诉它在 DBus 上出现的位置(这样你就可以把位置提供给注册器)。对于像appmenu-gtk我们使用生成的路径,这样就不会发生冲突,但如果您正在控制应用程序,则可能可以使用固定路径。然后创建一个树结构Dbusmenu 菜单项对象。根对象未显示,但传递给 Dbusmenu 服务器开始菜单。根目录下的第一级菜单将显示为Ubuntu 菜单栏

祝你好运,感谢所有骚扰我回答这个问题的人。我仍然认为你应该使用工具包支持(我撒谎说这是最后一次了),但祝你好运!

答案2

不幸的是,您找不到一份友好的文档。全局菜单是在考虑 GTK 和 Qt 的情况下开发的,虽然理论上可以实现对其他 WebKit 的支持,因为协议是基于 DBus 的,但在提供文档方面却付出了很少的努力。

我能给你的最好建议是指示器-应用菜单等离子小部件菜单栏。您可以阅读这些内容来了解​​ dbus 协议的工作原理。

答案3

您可以使用 python-dbus 绑定,并使用以下 API 文档:http://developer.ubuntu.com/api/ubuntu-12.04/python/Dbusmenu-0.4.html对于 DbusMenu,与全局菜单栏集成。

相关内容