背景研究
我正在尝试更新使用Quickly
创建的一个简单的python/Gtk
应用程序在Unity启动器中的进度条;然而,按照这个视频中的说明,我无法成功地更新Unity启动器中的进度条。
在Unity集成视频中,没有使用Quickly
,所以应用程序的结构略有不同,并且视频中使用的代码在默认的Quickly ubuntu-application
模板应用程序中似乎无法正常工作,需要进行修改。
截图
这是应用程序图标的屏幕截图,目前显示在Unity启动器中。
项目代码
可以在这里找到包含项目文件的.zip
文件。
预期行为
我希望上述代码在 Unity Launcher 中的测试应用程序图标上显示一个填充了 75% 的进度条,但是当执行命令quickly run
时,该应用程序只会运行而不显示任何进度条。
问题调查
我认为问题在于我没有正确地获取到应用程序的主窗口的引用,然而,我不确定如何正确解决这个问题。我还相信这一行代码:self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")
可能是另一个复杂性的源头,因为Quickly
创建的是.desktop.in
文件而不是普通的.desktop
文件,所以我不确定这是否也可能导致问题。
也许,问题的另一个来源是我并不完全理解.desktop
和.desktop.in
文件之间的区别。是否有可能复制test.desktop.in
文件并将其重命名为test.desktop
,然后将其放置在/usr/share/applications
目录中,以便get_for_desktop_id("test,desktop")
可以引用到正确的.desktop
文件?
相关研究链接
虽然我对.desktop和.desktop.in文件的区别还不太清楚,但我已经对.desktop文件进行了一些研究,并找到了几个链接:
- Desktop Entry Files (library.gnome.org)
- Desktop File Installation Directory (askubuntu.com)
- Unity Launcher API (wiki.ubuntu.com)
- Desktop Files: putting your application in the desktop menus (developer.gnome.org)
- Desktop Menu Specification (standards.freedesktop.org)
编辑
在运行python setup.py build
之后,然后导航到/build/share/applications
并将构建的test.desktop
文件移动到~/.local/share/applications
,最后执行quickly run
,只显示一个问号作为图标,没有可见的进度条。
编辑2
经过对构建的.desktop
文件进行进一步调查,发现其中的一行:Icon=/usr/share/test/media/test.svg
指向了一个名为test.svg
的图标文件,但该文件并不存在。
为了解决这个问题,我使用命令sudo mkdir test
在/usr/share/
下创建了一个名为test
的新文件夹,然后再在test文件夹内部使用命令sudo mkdir media
创建了另一个名为media
的文件夹,接着将位于我的Quickly项目目录下test/data/media/test.svg
位置的test.svg
图标文件移动到了/usr/share/test/media/
下。现在应用程序的.svg
图标在Unity启动器栏和alt-tab视图中都能正确显示,但是如下截图所示,仍然没有可见的进度条。
编辑 3
正如 @dobey 所指出的那样,在 TestWindow.py 文件的这一行代码中有一个拼写错误:
self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")
,
其中 test.destkop
应该是 test.desktop
。
我更正了这个拼写错误,当使用 quickly run
执行应用程序时没有发生明显的变化。然而,在将 print('Integrating with launcher')
这行代码添加到 add_launcher_integration()
后,终端没有相应的输出,这表明问题似乎是在应用程序启动时未正确调用 add_launcher_integration()
。
编辑4
经过进一步调查,发现当应用程序启动时实际上会调用add_launcher_integration()
。通过添加以下代码行:
os.system("clear")
在这行之前
print("Integrating with launcher")
现在终端中显示消息“与启动器集成”。然而,在Unity启动器栏中仍然没有进度条可见。
编辑5
通过执行python setup.py build
重新构建Quickly
项目,并将构建的.desktop
文件从位于/build/share/applications/
的Quickly
项目移动到~/.local/share/applications
,应用程序图标和进度条现在在Unity启动器栏中正确显示。下面是启动器集成的屏幕截图。