在 GTK+/Python 中设置应用程序菜单名称(修复“未知应用程序名称”)

Posted

技术标签:

【中文标题】在 GTK+/Python 中设置应用程序菜单名称(修复“未知应用程序名称”)【英文标题】:Setting Application Menu name in GTK+/Python (fixing "Unknown Application Name") 【发布时间】:2014-05-23 14:21:10 【问题描述】:

在 Ubuntu 12.04 下运行 GTK+ 应用程序时,如何设置应用程序级菜单中显示的应用程序名称?

这是一个示例应用:

from gi.repository import GLib, Gtk, Gio
import sys


class MyApp(object):
    def __init__(self):
        GLib.set_application_name('My App')
        self.app = Gtk.Application.new('org.example.test', 0)
        self.app.connect('startup', self.on_app_startup)
        self.app.connect('activate', self.on_app_activate)
        self.app.connect('shutdown', self.on_app_shutdown)

    def run(self, argv):
        self.app.run(argv)

    def on_app_startup(self, app):
        self.window = Gtk.ApplicationWindow.new(app)
        self.window.set_default_size(640, 480)
        self.window.set_title('AppMenu Demo')

        app.add_window(self.window)

        # # App menu
        app_menu = Gio.Menu()

        section = Gio.Menu()
        item = Gio.MenuItem.new('Quit', 'app.quit')
        item.set_attribute_value("accel", GLib.Variant("s", "<Control>Q"))
        section.append_item(item)

        app_menu.append_section(None, section)

        app.set_app_menu(app_menu)

        # # Menu bar
        menu_bar = Gio.Menu()

        submenu = Gio.Menu()

        section = Gio.Menu()
        section.append_item(Gio.MenuItem.new('Help', 'app.help'))

        submenu.append_section(None, section)

        menu_bar.append_submenu('Help', submenu)

        app.set_menubar(menu_bar)

        action = Gio.SimpleAction.new('quit', None)
        action.connect('activate', self.on_quit)
        app.add_action(action)

    def on_app_activate(self, app):
        self.window.show_all()

    def on_app_shutdown(self, app):
        pass

    def on_quit(self, action, data=None):
        self.app.quit()


if __name__ == '__main__':
    app = MyApp()
    app.run(sys.argv)

如果你在 Ubuntu 12.04 下运行这段代码,它会弹出一个标有“AppMenu Demo”的窗口;屏幕顶部的控制栏也显示此名称。如果将鼠标移动到控制栏,则会显示两个下拉菜单;应用程序菜单和“帮助”菜单。

这一切都很好 - 除了应用程序菜单的名称是“未知应用程序名称”。我找不到任何方法来更改此名称。 GLib.set_application_name(name) 不这样做。如何设置应用名称?

或者:这是 GTK+ 领先于 Ubuntu 支持的情况吗?谷歌搜索“未知应用程序名称”指向一系列错误报告和合并的补丁,这表明这可能是当前开发的一个领域,而不是稳定的 API。对 Ubuntu 中安装的应用程序的快速调查显示,大多数应用程序都有一个“文件”菜单,但没有任何东西可以被识别为 GTK+ 似乎支持的那种类型的“应用程序”菜单。我是否应该放弃应用菜单,直到它们在操作系统级别得到更好的支持?

【问题讨论】:

【参考方案1】:

这是一个 ubuntu 特定/unity 特定/古老的 gtk+ 3.4.x/gtk+ 3.6.x 错误。

有点电流(gtk+ 3.10.7Cinnamon 2.014 作为 DE)它工作得很好。

【讨论】:

显然不止于此 - Ubuntu 14.04 附带 GTK+ 3.10.8,但问题仍然存在。 如前所述,它可能是由 Unity(或其 AppIndicator 事物)引入的特定于 ubuntu 的错误。

以上是关于在 GTK+/Python 中设置应用程序菜单名称(修复“未知应用程序名称”)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Gtk3 可选标签中设置光标颜色?

在 GTK+ 3 中设置光标颜色

Gtk.CssProvider 在 Gtk3 Python3 中不起作用?

在 gnome 调整工具中用作侧边菜单的 Gtk+ 小部件的名称

如何在idea中设置tomcat热部署

如何在此模板引导程序 4 中设置悬停下拉菜单