Wie kann ich den Launcher-Fortschrittsbalken für meine Anwendung verwenden?

10

Hintergrundforschung

Ich versuche, den Fortschrittsbalken im Unity-Starter für eine einfache python/GtkAnwendung zu aktualisieren, die mit Quicklyaufgerufen erstellt wurde test. Nach den Anweisungen in diesem Video konnte ich den Fortschrittsbalken im UnityLauncher jedoch nicht erfolgreich aktualisieren . Im Unity Integration-Video wurde Quicklyes nicht verwendet, sodass die Struktur der Anwendung geringfügig anders war und der im Video verwendete Code ohne Änderung in einer Standardvorlagenanwendung nicht ordnungsgemäß zu funktionieren scheint Quickly ubuntu-application.


Screenshots

Hier ist ein Screenshot des Anwendungssymbols, wie es derzeit im Unity Launcher angezeigt wird.

Verschwommenes Anwendungssymbol ohne sichtbaren Fortschrittsbalken

Hier ist ein Screenshot der Art von Unity Launcher-Fortschrittsbalkenfunktionalität, die ich möchte (überlagert mit dem Mail-Symbol: wiki.ubuntu.com ).

Unity Launcher-Fortschrittsbalkenfunktionalität


Projektnummer

Eine .zipDatei mit den Projektdateien finden Sie hier .


Erwartetes Verhalten

Ich würde erwarten, dass der obige Code einen Fortschrittsbalken anzeigt , der zu 75% vollständig über dem Symbol für die Testanwendung im Unity Launcher liegt , aber die Anwendung wird nur ausgeführt und zeigt keinen Fortschrittsbalken an, wenn der Befehl quickly runausgeführt wird.


Problemuntersuchung

Ich glaube, dass das Problem darin besteht, dass ich keinen richtigen Verweis auf das Hauptfenster der Anwendung erhalte. Ich bin mir jedoch nicht sicher, wie ich dieses Problem richtig beheben kann. Ich glaube auch, dass die Zeile: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")eine weitere Quelle für Komplikationen sein kann, da Dateien anstelle von normalen Dateien Quicklyerstellt .desktop.inwerden. Daher .desktopbin ich mir nicht sicher, ob dies ebenfalls Probleme verursachen könnte.

Vielleicht ist eine andere Ursache des Problems, dass ich den Unterschied zwischen .desktopund .desktop.inDateien nicht ganz verstehe . Ist es möglicherweise sinnvoll, eine Kopie der test.desktop.inDatei zu erstellen, sie umzubenennen test.desktopund zu platzieren /usr/share/applications, um get_for_desktop_id("test,desktop")auf die richtige .desktopDatei zu verweisen ?


Verwandte Forschungslinks

Obwohl mir der Unterschied zwischen .desktop- und .desktop.in-Dateien immer noch nicht klar ist, habe ich einige Nachforschungen zu .desktop-Dateien angestellt und bin auf einige Links gestoßen:


Bearbeiten

Nach dem Ausführen python setup.py buildund anschließenden Navigieren /build/share/applicationsund Verschieben der erstellten test.desktopDatei zu ~/.local/share/applicationsund dem endgültigen Ausführen quickly runwird nur ein Fragezeichen für ein Symbol ohne sichtbaren Fortschrittsbalken angezeigt .

Fragezeichen für Anwendungssymbol angezeigt


Bearbeiten 2

Nach weiteren Untersuchungen der erstellten .desktopDatei stellt sich heraus, dass die Zeile: Icon=/usr/share/test/media/test.svginnerhalb der .desktopDatei auf eine Symboldatei mit dem Namen zeigte, test.svgdie nicht vorhanden war.

Um dieses Problem zu beheben, habe ich einen neuen Ordner erstellt, der mit dem Befehl aufgerufen testwurde /usr/share/, sudo mkdir testund dann einen weiteren Ordner innerhalb des Testordners erstellt, der mediamit dem Befehl aufgerufen sudo mkdir mediawurde. Anschließend habe ich die test.svgSymboldatei in meinem Quickly-Projektverzeichnis test/data/media/test.svgnach verschoben /usr/share/test/media/. Das .svgSymbol für die Anwendung wird jetzt ordnungsgemäß in der Unity-Startleiste und in der Alt-Tab-Ansicht angezeigt. Es ist jedoch noch keine Fortschrittsanzeige sichtbar, wie im folgenden Screenshot gezeigt.

Es wird nur das Anwendungssymbol angezeigt


Bearbeiten 3

Wie @dobey betonte, gab es einen Tippfehler im Code der Datei TestWindow.py in der Zeile:

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

wo test.destkopsollte sein test.desktop.

Ich habe diesen Tippfehler geändert und es sind keine sichtbaren Änderungen aufgetreten, als die Anwendung mit ausgeführt wurde quickly run. Nach dem Hinzufügen der Zeile print('Integrating with launcher')zu add_launcher_integration()gab es jedoch keine entsprechende Ausgabe im Terminal, als die Anwendung ausgeführt wurde, was darauf hinweist, dass das Problem darin zu bestehen scheint, dass add_launcher_integration()es beim Start der Anwendung nicht richtig aufgerufen zu werden scheint.


Bearbeiten 4

Nach weiteren Untersuchungen stellt sich heraus, dass dies add_launcher_integration()tatsächlich aufgerufen wird, wenn die Anwendung gestartet wird. Mit der Hinzufügung der Zeile:

os.system("clear")

vor der Linie

print("Integrating with launcher")

Die Meldung "Integration in Launcher" wird jetzt in der angezeigt terminal.

In der Unity-Startleiste ist jedoch noch keine Fortschrittsanzeige sichtbar .


Bearbeiten 5

Nach dem erneuten Erstellen des QuicklyProjekts durch Ausführen python setup.py buildund Verschieben der erstellten .desktopDatei innerhalb des QuicklyProjekts /build/share/applications/in ~/.local/share/applicationswerden das Anwendungssymbol und die Fortschrittsanzeige nun ordnungsgemäß in der Unity-Startleiste angezeigt. Ein Screenshot der Launcher-Integration ist unten zu sehen.

Anwendungssymbol und Fortschrittsbalken werden angezeigt

Kevin Gurney
quelle

Antworten:

8

Die .desktop-Datei muss an dem Ort installiert werden, an dem die bamfBibliothek davon weiß.

Sie sollten in der Lage sein, zu testen, indem Sie die erstellte .desktop-Datei (die aus der .desktop.in-Datei erstellt werden sollte) in Ihren ~/.local/share/applicationsOrdner kopieren und ausführen. Die update-desktop-database ~/.local/share/applicationsAusführung dieses Befehls ist jedoch möglicherweise nicht erforderlich, wenn Ihre Anwendung keine MIME-Typen verarbeitet .

Der Unterschied zwischen .desktop und .desktop.in besteht darin, dass .desktop.in für die Übersetzung eingerichtet ist und während der Erstellung von intltool verarbeitet wird, damit die Übersetzungen eingefügt werden und die .desktop-Datei aus der .desktop.in erstellt wird Datei.

Außerdem habe ich gerade einen Tippfehler in Ihrem Code bemerkt:

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

Beachten Sie das "destkop" vs. "desktop", das es sein sollte. Vielleicht ist es das, wenn es sich nicht um einen Tippfehler handelt. Angenommen, Ihr Code wird tatsächlich ausgeführt, ist dies ein Problem. Wenn es nicht ausgeführt wird, ist das das Problem. Sie können print('Integrating with launcher')der Funktion add_launcher_integration eine hinzufügen, um sie anzuzeigen. Es sollte beim Ausführen auf dem Terminal angezeigt werden.

Dobey
quelle
Wann wird die erstellte .desktop-Datei erstellt? Wird es erstellt, wenn schnell ausgeführt wird, und wo befindet es sich?
Kevin Gurney
Ich verwende es nicht schnell und weiß nicht, wann genau es erstellt wird, aber normalerweise passiert es mit einer Standard-Python-Bibliothek / -Anwendung, die setup.py mit DistUtilsExtra verwendet, wenn "./setup.py build" oder ausgeführt wird Befehl setup.py, der auch build ausführt.
Dobey
Ich habe es geschafft, python setup.py build nacheinander auszuführen. Verschiebe ich jetzt einfach die Datei test.desktop in ~ / .local / share / applications und der Fortschrittsbalken sollte einfach angezeigt werden, wenn ich schnell ausführen kann?
Kevin Gurney
Ich habe das Python-Projekt erstellt und dann die erstellte .desktop-Datei nach ~ / usr / share / applications verschoben und dann die Update-Desktop-Datenbank ~ / .local / share / applications ausgeführt, wie Sie vorgeschlagen haben, aber jetzt erhalte ich nur ein Fragezeichen Für ein Anwendungssymbol wie hier gezeigt: i.stack.imgur.com/RWYud.png .
Kevin Gurney
Was sagt die Zeile Icon = in der Datei test.desktop?
Dobey