在 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.7
和 Cinnamon 2.014
作为 DE)它工作得很好。
【讨论】:
显然不止于此 - Ubuntu 14.04 附带 GTK+ 3.10.8,但问题仍然存在。 如前所述,它可能是由 Unity(或其 AppIndicator 事物)引入的特定于 ubuntu 的错误。以上是关于在 GTK+/Python 中设置应用程序菜单名称(修复“未知应用程序名称”)的主要内容,如果未能解决你的问题,请参考以下文章
Gtk.CssProvider 在 Gtk3 Python3 中不起作用?