Как заставить индикатор выполнения программы запуска работать с моим приложением?

10

Фундаментальные исследования

Я пытаюсь обновить индикатор выполнения в панели запуска Unity для простого python/Gtkприложения, созданного с использованием Quicklynamed test; однако, следуя инструкциям в этом видео , я не смог успешно обновить индикатор выполнения в панели Unityзапуска . В видео интеграции Unity Quicklyон не использовался, поэтому способ структурирования приложения несколько отличался, и код, используемый в видео, не работает должным образом без изменения в Quickly ubuntu-applicationшаблонном приложении по умолчанию .


Скриншоты

Вот снимок экрана со значком приложения, который в данный момент отображается в Unity Launcher.

Размытый значок приложения без видимого индикатора выполнения

Вот снимок экрана с той функциональностью индикатора выполнения программы запуска Unity, которая мне нужна (наложена на значок почты: wiki.ubuntu.com ).

Unity Launcher Progress Bar Функциональность


Код проекта

.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 и наткнулся на пару ссылок:


редактировать

После запуска, 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файл значок , расположенный в моем каталоге проекта Быстро на test/data/media/test.svgк /usr/share/test/media/. .svgЗначок приложения теперь отображается правильно в пусковой панели Unity и в представлении закладками альт, однако до сих пор не видно индикатор , как показано на скриншоте ниже.

Отображается только значок приложения


Редактировать 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и перемещения встроенного .desktopфайла внутри Quicklyпроекта , расположенного по адресу , /build/share/applications/чтобы ~/.local/share/applications, значок приложения и прогресс - бар теперь отображается правильно в Unity пускового бара. Скриншот интеграции лаунчера можно увидеть ниже.

Отображается значок приложения и индикатор выполнения

Кевин Герни
источник

Ответы:

8

Файл .desktop должен быть установлен в том месте, где об этом bamfзнает библиотека.

Вы должны быть в состоянии выполнить тестирование, скопировав встроенный файл .desktop (который должен быть создан из .desktop.in), в вашу ~/.local/share/applicationsпапку и запустив его update-desktop-database ~/.local/share/applications, хотя запуск этой команды может не потребоваться, если ваше приложение не обрабатывает какие-либо типы MIME. ,

Разница между .desktop и .desktop.in заключается в том, что .desktop.in настроен для перевода и обрабатывается intltool во время сборки, чтобы вставить переводы, создавая файл .desktop из .desktop.in. файл.

Также я только что заметил опечатку в вашем коде:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")

Обратите внимание на «destkop» и «desktop», которые должны быть. Возможно, это так, если это не ошибка повторного набора. Предполагая, что ваш код на самом деле выполняется, это проблема. Если он не запущен, то это проблема. Вы можете добавить print('Integrating with launcher')к функции add_launcher_integration, чтобы увидеть. Он должен появиться на терминале при запуске.

Добей
источник
Когда создается встроенный файл .desktop? Он построен, когда выполняется быстрый запуск, и где он находится?
Кевин Герни
Я не пользуюсь быстро и не знаю, когда именно он его соберет, но обычно со стандартной библиотекой / приложением python, использующим setup.py с DistUtilsExtra, это происходит при запуске «./setup.py build» или Команда setup.py, которая также запускает сборку.
Добей
Мне удалось последовательно запустить сборку python setup.py. Итак, теперь мне просто переместить файл test.desktop в ~ / .local / share / Applications, и индикатор выполнения должен просто отображаться при быстром запуске?
Кевин Герни
Я собрал проект python, а затем переместил встроенный файл .desktop в ~ / usr / share / Applications, а затем запустил update-desktop-database ~ / .local / share / Applications, как вы предлагали, но теперь у меня только вопросительный знак для значка приложения, как показано здесь: i.stack.imgur.com/RWYud.png .
Кевин Герни
Что говорит строка Icon = в файле test.desktop?
Добей