我是 Gtk+ 开发的新手,正在尝试使用 PyGObject 和 Gtk+3.0 编写一个应用程序。然而,当我从命令行在 Gnome Shell 中运行应用程序时,出现在左上角(紧邻“活动”热角右侧)的应用程序名称仅设置为 Python 源文件的名称我跑去启动应用程序。有什么方法可以设置我的应用程序的名称出现在 Gnome Shell 中吗?我查看了 Gtk.Application,虽然它似乎做了一些我想要的事情(无论如何从 Gtk+3.3 开始),但我似乎不知道如何修复活动名称或应用程序名称。
gnome-shell 尝试将窗口与应用程序(
ShellApp
实例)匹配并使用该名称。这样做的代码在这里:http://git.gnome.org/browse/gnome-shell/tree/src/shell-window-tracker.c#n328
但是如果它无法找到窗口的
ShellApp
,那么它会回退到使用指定的ICCCMWM_CLASS
(规范位于http://tronche.com/gui/x/icccm/sec-4.html# s-4.1.2.5)这里:http://git.gnome.org/browse/gnome-shell/tree/src/shell-app.c#n361
因此,如果您没有安装 .desktop 文件来查找应用程序名称,您将获得默认的
WM_CLASS
出现在其中。 GTK 根据可执行文件名称自动生成。您可以在实现窗口之前(这意味着在窗口上调用 _show
之前)使用 gtk_window_set_wmclass()
覆盖它
这是一个简单的示例,将显示为“Hello World”。不要忘记设置窗口标题!
#!/usr/bin/python
from gi.repository import Gtk
win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.set_wmclass ("Hello World", "Hello World")
win.set_title ("Hello World")
win.show_all()
Gtk.main()
2023 年和 GTK4 的答案:
set_wmclass
已弃用。要在 Gnome shell 顶部栏中获取自定义名称,您可以使用 set_prgname
(链接为 C,链接为 Vala),请注意 set_application_name
不会更改顶部栏中的名称。
这是 Vala 中的示例:
public class HelloApp : Gtk.Application {
public const string VERSION = "0.1.0";
public HelloApp() {
Object(application_id: "com.example.apps.hello");
}
protected override void activate() {
var window = new Gtk.ApplicationWindow(this) {
default_width = 640,
default_height = 480,
title = @"Hello $(VERSION)"
};
window.present();
}
public static int main(string[] args) {
Environment.set_prgname(@"Hello $(VERSION)");
return new HelloApp().run(args);
}
}
构建:
valac --target-glib=auto --pkg gtk4 hello.vala -o hello