Як змусити панель прогресу запуску працювати зі своїм додатком?


10

Фонове дослідження

Я намагаюся оновити панель прогресу в панелі запуску Unity для простого python/Gtkдодатка, створеного за допомогою Quicklyвиклику test; однак, дотримуючись вказівок цього відео , я не зміг успішно оновити панель прогресу в Unityпусковій установці . У відео Unity Integration відео Quicklyне використовувалося, тому спосіб структурування додатка був дещо іншим, а код, використаний у відео, схоже, не працює належним чином без змін у Quickly ubuntu-applicationпрограмі шаблону за замовчуванням .


Скріншоти

Ось скріншот піктограми програми, оскільки вона наразі відображається у запуску Unity Launcher.

Розмита піктограма програми без видимої смуги прогресу

Ось скріншот типу функціональної панелі ходу запуску Unity, який я хотів би (накладений на піктограму пошти: wiki.ubuntu.com ).

Функціональність панелі прогресу Unity Launcher


Код проекту

.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, яка також виконує збірку.
dobey

Мені вдалося послідовно запустити python setup.py build. Отже, тепер я просто переміщу файл test.desktop у ~ / .local / share / застосунки, а панель прогресу повинна просто відображатися при швидкому виконанні програми?
Кевін Ґерні

Я створив проект python, а потім перемістив вбудований файл .desktop у ~ / usr / share / applications, а потім запустив update-desktop-database ~ / .local / share / програми, як ви запропонували, але тепер я отримую лише знак питання для піктограми програми, як показано тут: i.stack.imgur.com/RWYud.png .
Кевін Ґерні

Що говорить рядок Icon = у файлі test.desktop?
dobey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.