如何在 Gnome Shell 中设置应用程序标题?

问题描述 投票:0回答:2

我是 Gtk+ 开发的新手,正在尝试使用 PyGObject 和 Gtk+3.0 编写一个应用程序。然而,当我从命令行在 Gnome Shell 中运行应用程序时,出现在左上角(紧邻“活动”热角右侧)的应用程序名称仅设置为 Python 源文件的名称我跑去启动应用程序。有什么方法可以设置我的应用程序的名称出现在 Gnome Shell 中吗?我查看了 Gtk.Application,虽然它似乎做了一些我想要的事情(无论如何从 Gtk+3.3 开始),但我似乎不知道如何修复活动名称或应用程序名称。

python gtk gnome-3
2个回答
16
投票

gnome-shell 尝试将窗口与应用程序(

ShellApp
实例)匹配并使用该名称。这样做的代码在这里:http://git.gnome.org/browse/gnome-shell/tree/src/shell-window-tracker.c#n328

但是如果它无法找到窗口的

ShellApp
,那么它会回退到使用指定的ICCCM
WM_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()

0
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.