Jak sprawić, by pasek postępu programu uruchamiającego działał z moją aplikacją?

10

Badania podstawowe

Próbuję zaktualizować pasek postępu w programie uruchamiającym Unity dla prostej python/Gtkaplikacji utworzonej za pomocą Quicklywywołania test; jednak postępując zgodnie z instrukcjami w tym filmie , nie udało mi się zaktualizować paska postępu w programie Unityuruchamiającym . W filmie Unity Integration Quicklynie został użyty, więc sposób, w jaki aplikacja była zbudowana, był nieco inny, a kod użyty w filmie nie wydaje się działać poprawnie bez modyfikacji w domyślnej Quickly ubuntu-applicationaplikacji szablonu.


Zrzuty ekranu

Oto zrzut ekranu ikony aplikacji, która jest obecnie wyświetlana w Unity Launcher.

Ikona aplikacji rozmazanej bez widocznego paska postępu

Oto zrzut ekranu z rodzaju paska postępu programu uruchamiającego Unity, który chciałbym (nałożony na ikonę poczty: wiki.ubuntu.com ).

Unity Launcher Pasek postępu Funkcjonalność


Kod projektu

.zipPlik zawierający pliki projektu można znaleźć tutaj .


Spodziewane zachowanie

Spodziewałbym się, że powyższy kod pokaże pasek postępu, który jest w 75% całkowicie nałożony na ikonę aplikacji testowej w Unity Launcher , ale aplikacja działa tylko i nie wyświetla paska postępu po wykonaniu polecenia quickly run.


Badanie problemu

Uważam, że problem polega na tym, że nie otrzymuję poprawnie odwołania do głównego okna aplikacji, jednak nie jestem pewien, jak poprawnie rozwiązać ten problem. Uważam również, że wiersz: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")może być kolejnym źródłem komplikacji, ponieważ Quicklytworzy .desktop.inpliki, a nie zwykłe .desktoppliki, więc nie jestem pewien, czy może to również powodować problemy.

Być może innym źródłem problemu jest to, że nie do końca rozumiem różnicę między plikami .desktopa .desktop.inplikami. Czy ma sens tworzenie kopii test.desktop.inpliku i zmiana jego nazwy test.desktoporaz umieszczenie go /usr/share/applicationsw celu get_for_desktop_id("test,desktop")odniesienia do poprawnego .desktoppliku?


Powiązane linki badawcze

Chociaż nadal nie jestem w pełni świadomy różnicy między plikami .desktop i .desktop.in, przeprowadziłem badania dotyczące plików .desktop i natrafiłem na kilka linków:


Edytować

Po uruchomieniu, python setup.py builda następnie /build/share/applicationsprzejściu i przeniesieniu zbudowanego test.desktoppliku do ~/.local/share/applications, a na końcu jego wykonaniu quickly run, wyświetlany jest tylko znak zapytania dla ikony, bez widocznego paska postępu .

Wyświetlany jest znak zapytania dla ikony aplikacji


Edytuj 2

Po dalszych badaniach wbudowanego .desktoppliku okazuje się, że wiersz: Icon=/usr/share/test/media/test.svgw .desktoppliku wskazywał na plik ikony o nazwie, test.svgktóry nie istniał.

Aby rozwiązać ten problem, stworzyłem nowy folder o nazwie testw /usr/share/użyciu polecenia sudo mkdir test, a następnie utworzony kolejny wewnątrz folderu do folderu o nazwie testu mediaprzy użyciu polecenia sudo mkdir media, a następnie przeniosłem test.svgplik ikony znajdującej się w moim katalogu projektu szybko, w test/data/media/test.svgcelu /usr/share/test/media/. .svgIkona aplikacji wyświetla teraz poprawnie na pasku uruchamiania Unity i w widoku alt-tab, jednak nadal brak jest widoczny pasek postępu , jak pokazano na poniższym zrzucie ekranu.

Wyświetlana jest tylko ikona aplikacji


Edytuj 3

Jak zauważył @dobey, w kodzie pliku TestWindow.py w wierszu była literówka:

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

gdzie test.destkoppowinien być test.desktop.

Zmieniłem tę literówkę i nie wystąpiły żadne widoczne zmiany, gdy aplikacja została wykonana przy użyciu quickly run. Jednak po dodaniu linii print('Integrating with launcher')do add_launcher_integration()nie było odpowiednie wyjście w terminalu, gdy aplikacja została uruchomiona, co wskazuje, że problem wydaje się, że add_launcher_integration()nie wydaje się być poprawnie po nazwie uruchamiania aplikacji.


Edytuj 4

Po dalszym badaniu okazuje się, że add_launcher_integration()tak naprawdę wywoływana jest przy uruchomieniu aplikacji. Z dodaniem linii:

os.system("clear")

przed linią

print("Integrating with launcher")

komunikat „Integracja z programem uruchamiającym” jest teraz wyświetlany w terminal.

Jednak nadal nie ma widocznego paska postępu w pasku uruchamiania Unity .


Edytuj 5

Po przebudowie Quicklyprojektu poprzez wykonanie python setup.py buildi przeniesienie zbudowany .desktopplików w Quicklyprojekcie znajduje się /build/share/applications/na ~/.local/share/applications, ikony aplikacji na pasku postępu i teraz wyświetla się poprawnie w Jedności wyrzutni kreskowego. Zrzut ekranu integracji programu uruchamiającego można zobaczyć poniżej.

Wyświetlana ikona aplikacji i pasek postępu

Kevin Gurney
źródło

Odpowiedzi:

8

Plik .desktop musi być zainstalowany w miejscu, w którym bamfbiblioteka o nim wie.

Powinieneś być w stanie przetestować, kopiując wbudowany plik .desktop (który powinien zostać utworzony z .desktop.in) do swojego ~/.local/share/applicationsfolderu i uruchamiając go update-desktop-database ~/.local/share/applications, chociaż uruchomienie tego polecenia może nie być potrzebne, jeśli aplikacja nie obsługuje żadnych typów MIME .

Różnica między .desktop i .desktop.in polega na tym, że .desktop.in jest skonfigurowany do tłumaczenia i jest przetwarzany przez intltool podczas kompilacji, aby wstawić tłumaczenia, tworząc plik .desktop.in z .desktop.in plik.

Właśnie zauważyłem literówkę w twoim kodzie:

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

Zwróć uwagę na „destkop” vs. „pulpit”, który powinien być. Być może o to chodzi, jeśli nie jest to błąd ponownego wpisywania. Zakładając, że Twój kod jest faktycznie uruchamiany, jest to problem. Jeśli nie jest uruchomiony, to jest problem. Możesz dodać a print('Integrating with launcher')do funkcji add_launcher_integration, aby zobaczyć. Po uruchomieniu powinien pojawić się na terminalu.

dobey
źródło
Kiedy tworzony jest wbudowany plik .desktop? Czy jest budowany, gdy wykonywane jest szybkie uruchamianie i gdzie się znajduje?
Kevin Gurney
Nie używam szybko i nie wiem, kiedy dokładnie go zbuduje, ale normalnie ze standardową biblioteką / aplikacją w Pythonie, używając setup.py z DistUtilsExtra, zdarzyłoby się to po uruchomieniu „./setup.py build” lub polecenie setup.py, które również uruchamia kompilację.
dobey,
Udało mi się sukcesywnie uruchamiać kompilację setup.py w Pythonie. Czy teraz mogę po prostu przenieść plik test.desktop do ~ / .local / share / applications, a pasek postępu powinien być po prostu wyświetlany, gdy wykonam szybko?
Kevin Gurney
Zbudowałem projekt Pythona, a następnie przeniosłem zbudowany plik .desktop do ~ / usr / share / applications, a następnie uruchomiłem update-desktop-database ~ / .local / share / apps, jak sugerowałeś, ale teraz otrzymuję tylko znak zapytania dla ikony aplikacji, jak pokazano tutaj: i.stack.imgur.com/RWYud.png .
Kevin Gurney
Co mówi wiersz Icon = w pliku test.desktop?
dobey