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

在GTK+中设置应用程序菜单名称/Python(修复“未知应用程序名”),python,ubuntu,menu,gtk,Python,Ubuntu,Menu,Gtk,在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.ex

在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)
从gi.repository导入GLib、Gtk、Gio
导入系统
类MyApp(对象):
定义初始化(自):
GLib.set\u应用程序\u名称(“我的应用程序”)
self.app=Gtk.Application.new('org.example.test',0)
self.app.connect('startup',self.on\u app\u startup)
self.app.connect('activate',self.on\u app\u activate)
self.app.connect('shutdown',self.on\u app\u shutdown)
def运行(自身,argv):
self.app.run(argv)
应用程序启动时的def(自身、应用程序):
self.window=Gtk.ApplicationWindow.new(应用程序)
self.window.set\u默认大小(640480)
self.window.set_title('AppMenu Demo')
应用程序添加窗口(自窗口)
##应用程序菜单
app_menu=Gio.menu()
section=Gio.Menu()
item=Gio.MenuItem.new('Quit','app.Quit')
项目。设置属性值(“加速度”,GLib.Variant(“s”,“Q”))
第节附加项目(项目)
应用程序菜单。附加部分(无,部分)
应用程序设置应用程序菜单(应用程序菜单)
##菜单栏
menu_bar=Gio.menu()
子菜单=Gio.Menu()
section=Gio.Menu()
section.append_项(Gio.MenuItem.new('Help','app.Help'))
子菜单.附加部分(无,部分)
菜单栏。附加子菜单(“帮助”,子菜单)
应用程序设置菜单栏(菜单栏)
action=Gio.SimpleAction.new('quit',无)
action.connect('activate',self.on_quit)
应用程序添加操作(操作)
应用程序上的def激活(自我,应用程序):
self.window.show_all()
def on_应用程序_关机(自身,应用程序):
通过
退出时的def(自我、操作、数据=无):
self.app.quit()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=MyApp()
应用程序运行(sys.argv)
如果你在Ubuntu12.04下运行这段代码,它会弹出一个标签为“AppMenu Demo”的窗口;屏幕顶部的控制栏也显示此名称。如果将鼠标移动到控制栏,将显示两个下拉菜单;应用程序菜单和“帮助”菜单

这一切都很好-除了应用程序菜单的名称是“未知应用程序名称”。我找不到任何办法改变这个名字
GLib.set\u application\u name(name)
不起作用。如何设置应用程序名称


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

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

有点时兴(
gtk+3.10.7
肉桂2.014
as DE),它工作得很好


显然还有更多的问题——Ubuntu 14.04附带GTK+3.10.8,但问题仍然存在。如前所述,可能是Unity(或其AppIndicator)引入的特定于Ubuntu的bug。