背景研究
我正在尝试更新 Unity 启动器中的进度条,以便python/Gtk
使用Quickly
名为test
;但是,按照这个视频,我无法成功更新Unity
启动器中的进度条。在 Unity Integration 视频中,Quickly
并未使用,因此应用程序的构建方式略有不同,并且视频中使用的代码似乎无法在默认Quickly ubuntu-application
模板应用程序中不经过修改就正常运行。
截图
这是当前在 Unity Launcher 中显示的应用程序图标的屏幕截图。
下面是我想要的 Unity 启动器进度条功能的屏幕截图(覆盖在邮件图标上:wiki.ubuntu.com)。
项目代码
.zip
可以找到包含项目文件的文件这里。
预期行为
我希望上述代码显示一个进度条,该进度条已满 75%,并覆盖在 Unity Launcher 中的测试应用程序图标上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 文件做了一些研究,并且遇到了几个链接:
- 桌面入口文件(library.gnome.org)
- 桌面文件安装目录(askubuntu.com)
- Unity 启动器 API(wiki.ubuntu.com)
- 桌面文件:将您的应用程序放入桌面菜单(developer.gnome.org)
- 桌面菜单规范(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
中的行:.desktop
指向一个test.svg
不存在的图标文件。
为了解决这个问题,我使用命令创建了一个名为 的新文件夹test
,/usr/share/
然后sudo mkdir test
使用media
命令在测试文件夹内创建了另一个名为 的文件夹sudo mkdir media
,然后我将test.svg
位于 Quickly 项目目录中的图标文件移动test/data/media/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")
现在将在 中显示“正在与启动器集成”消息terminal
。
然而,Unity 启动器栏中仍然没有可见的进度条。
编辑5
Quickly
通过执行并将位于 的项目内的python setup.py build
构建文件移动到来重建项目后,应用程序图标和进度条现在可在 Unity 启动器栏中正确显示。启动器集成的屏幕截图如下所示。.desktop
Quickly
/build/share/applications/
~/.local/share/applications
答案1
.desktop 文件必须安装在bamf
图书馆知道的位置。
您应该能够通过将构建的 .desktop 文件(应从 .desktop.in 创建)复制到您的~/.local/share/applications
文件夹并运行来进行测试update-desktop-database ~/.local/share/applications
,但是如果您的应用程序不处理任何 MIME 类型,则可能不需要运行此命令。
.desktop 和 .desktop.in 之间的区别在于 .desktop.in 是为翻译而设置的,并在构建期间由 intltool 处理,以插入翻译,并从 .desktop.in 文件创建 .desktop 文件。
另外我刚刚注意到你的代码中有一个拼写错误:
self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")
请注意应该是“destkop”而不是“desktop”。如果不是重复输入错误,也许就是这样。假设您的代码确实正在运行,那么这就是问题所在。如果它没有运行,那么这就是问题所在。您可以将一个添加print('Integrating with launcher')
到 add_launcher_integration 函数中以查看。运行时它应该出现在终端上。