我正在寻找关于如何向非 gtk、非 qt 应用程序添加全局菜单支持的良好文档(示例、教程或指南)。(在 gtk 中,它对主菜单“神奇地”工作......)。我想与它一起使用的工具包是kivy,它支持 glib-mainloop(例如用于 gstreamer),所以原则上都应该在那里工作。
我已经看到了Dbusmenu和这里的 API 参考,但这对理解机制不是很有帮助。
有一个简短的示例用于创建包含 dbus-menu的启动器快速列表,但不包含 global-menu / appmenu。
有一个wiki 页面不包含任何相关信息,除了“欢迎支持其他工具包上的应用程序菜单,但不是 DX 团队的优先事项,需要帮助。”
该图有一些来自指标应用菜单源代码的信息,但还不够,在 developer.ubuntu.com 上找不到,需要更多解释:

所以:
在某些 ubuntu 程序(ubuntu 控制面板、系统设置)中,但不是例如在 banshee 中,窗口的顶部包含暗色调的元素(带有 Ambience 主题)。但我找不到自动执行此操作的标准小部件。
这些颜色都是手工设置的吗(而不是标准的小部件+主题)?如果它们是手动设置的,它们在主题中来自哪里(gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color) 中的参数是什么)?
编辑:它似乎不是一个简单的 Gtk.Toolbar。如果我运行以下代码:
from gi.repository import Gtk
window = Gtk.Window()
window.set_default_size(200, -1)
window.connect("destroy", lambda q: Gtk.main_quit())
toolbar = Gtk.Toolbar()
window.add(toolbar)
toolbutton = Gtk.ToolButton(stock_id=Gtk.STOCK_NEW)
toolbar.add(toolbutton)
window.show_all()
Gtk.main()
Run Code Online (Sandbox Code Playgroud)
我得到一个这样的窗口:
工具栏没有暗色调。
EDIT2:尽管 j-johan-edwards 的“带有特殊上下文的工具栏”答案在大多数程序中都是正确的,但在 ubuntuone 控制面板中却并非如此。这个程序有一个 GtkVBox,它可以包含任何范围的小部件(与工具栏不同)。我仍然无法确定 gtk-theme 如何知道如何绘制窗口的那部分。

但无论如何:现在一个工具栏对我来说就足够了......
我开始用“快速”编写程序。所需语言的列表将是一个首选。例子:
languages = ["en", "de"]
Run Code Online (Sandbox Code Playgroud)
处理首选项部分的(自动创建的)快速代码如下所示:
# Define your preferences dictionary in the __init__.main() function.
# The widget names in the PreferencesTestProjectDialog.ui
# file need to correspond to the keys in the preferences dictionary.
#
# Each preference also need to be defined in the 'widget_methods' map below
# to show up in the dialog itself. Provide three bits of information:
# 1) The first entry is the method on the widget that grabs a value from the
# widget. …Run Code Online (Sandbox Code Playgroud) 在 qml 文档中有一个拖放示例:
import QtQuick 2.0
Item {
width: 200; height: 200
DropArea {
x: 75; y: 75
width: 50; height: 50
onDropped: console.log("dropped")
onEntered: console.log("entered")
Rectangle {
anchors.fill: parent
color: "green"
visible: parent.containsDrag
}
}
Rectangle {
x: 10; y: 10
width: 20; height: 20
color: "red"
Drag.active: dragArea.drag.active
Drag.hotSpot.x: 10
Drag.hotSpot.y: 10
MouseArea {
id: dragArea
anchors.fill: parent
drag.target: parent
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用“onDropped”和“onEntered”添加了两行。虽然通过拖动小矩形触发“onEntered”,但我无法使“onDropped”触发。
我该怎么做才能触发它?
我正在尝试将 gedit 用于两个不同的任务:开发 Python 软件和编写 Latex 文档。两者都基于纯文本文件,但它们非常不同:例如,Python 代码需要对齐才能看到代码的结构(循环、函数等)。因此,等宽字体是一件好事。对于编写 Latex 文档,我主要需要可读性。这最好使用用于打印的字体来实现,绝对不是等宽字体。
有没有办法告诉 gedit 使用每个文件类型的首选项?例如 *.tex 的 Garamond 和 *.py 的 Monospace?(但这个问题不仅限于字体,也不限于 Latex 和 Python)。
大约一年前,我将德语作为我的主要语言。后来我把它改成了英文。系统的大部分部分接受了更改。
值得注意的例外是软件包描述,某些软件包仍保留德语版本。
您可以在图像(apt-cache 和软件中心)中看到,虽然一些描述是英语,但有些仍然是德语。所以问题是:我该如何重置?我猜想某个地方有一个描述缓存需要被告知它应该更新所有描述?
编辑:按要求:一些语言相关命令的输出:
$ cat /etc/default/locale
LANG="en_US.UTF-8"
$ apt-config dump | grep Lang
Acquire::Languages "";
Acquire::Languages:: "de_DE";
Acquire::Languages:: "de";
Acquire::Languages:: "en";
Acquire::Languages:: "none";
$ locale
LANG=de_DE.UTF-8
LANGUAGE=en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
请注意:我不确定每个条目的含义,但某些de_DE.UTF-8 可能没问题,因为我确实想要标准德语格式的纸张尺寸、货币、时间等。