Je tente de mettre à jour la barre de progression dans le lanceur Unity pour une application simple python/Gtk
créée à l'aide de Quickly
appelée test
; Cependant, en suivant les instructions de cette vidéo , , je n’ai pas pu mettre à jour correctement la barre de progression dans le lanceur Unity
. Quickly
n'a pas été utilisé dans la vidéo Unity Integration. La structure de l'application était donc légèrement différente et le code utilisé dans la vidéo ne semble pas fonctionner correctement sans modification dans une application modèle par défaut Quickly ubuntu-application
.
Voici une capture d'écran de l'icône de l'application telle qu'elle est actuellement affichée dans le lanceur Unity.
Voici une capture d'écran du type de fonctionnalité de la barre de progression du lanceur d'Unity que je voudrais (superposée sur l'icône de courrier électronique: wiki.ubuntu.com ).
Un fichier .Zip
contenant les fichiers du projet peut être trouvé ici .
Je m'attendrais à ce que le code ci-dessus affiche une barre de progression superposée à 75% sur l'icône de l'application de test dans Unity Launcher , mais l'application ne s'exécute que et ne montre aucune progression. barre lorsque la commande quickly run
est exécutée.
Je pense que le problème est que je ne reçois pas correctement une référence à la fenêtre principale de l'application. Cependant, je ne sais pas comment résoudre correctement ce problème. Je pense également que la ligne: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")
peut être une autre source de complication, car Quickly
crée des fichiers .desktop.in
plutôt que des fichiers .desktop
ordinaires. Je ne sais donc pas si cela pourrait également poser problème.
Une autre source du problème est peut-être que je ne comprends pas tout à fait la différence entre les fichiers .desktop
et .desktop.in
. Cela a-t-il du sens de faire une copie du fichier test.desktop.in
et de le renommer test.desktop
et de le placer dans /usr/share/applications
afin que get_for_desktop_id("test,desktop")
fasse référence au fichier .desktop
correct?
Bien que la différence entre les fichiers .desktop et .desktop.in ne soit toujours pas claire, j'ai effectué quelques recherches sur les fichiers .desktop et j'ai rencontré quelques liens:
Après avoir exécuté python setup.py build
, puis navigué vers /build/share/applications
, puis déplacé le fichier test.desktop
construit vers ~/.local/share/applications
, et finalement exécuté quickly run
, uniquement un point d'interrogation pour une icône est affiché, sans barre de progression visible .
Après une analyse plus approfondie du fichier .desktop
construit, il s’avère que la ligne: Icon=/usr/share/test/media/test.svg
dans le fichier .desktop
pointait vers un fichier d’icône appelé test.svg
qui n’existait pas.
Afin de résoudre ce problème, j'ai créé un nouveau dossier appelé test
dans /usr/share/
à l'aide de la commande Sudo mkdir test
, puis créé un autre dossier à l'intérieur du dossier de test appelé media
à l'aide de la commande Sudo mkdir media
, et puis j'ai déplacé le fichier icône test.svg
situé dans mon répertoire de projet Quickly dans test/data/media/test.svg
vers /usr/share/test/media/
. L’icône .svg
de l’application s’affiche désormais correctement dans la barre de lancement de Unity et dans la vue alt-tab. Cependant , il n’existe toujours pas de barre de progression visible , comme indiqué dans capture d'écran ci-dessous.
Comme @dobey l'a fait remarquer, il y avait une faute de frappe dans le code du fichier TestWindow.py à la ligne:
self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")
,
où test.destkop
devrait être test.desktop
.
J'ai changé cette faute de frappe et aucun changement visible ne s'est produit lors de l'exécution de l'application avec quickly run
. Cependant, après l'ajout de la ligne print('Integrating with launcher')
à add_launcher_integration()
, aucune sortie correspondante n'a été émise dans le terminal lors de l'exécution de l'application, ce qui indique que le problème semble être que add_launcher_integration()
ne semble pas être appelé correctement au démarrage de l'application.
Après une enquête plus approfondie, il s'avère que add_launcher_integration()
est en fait appelée au démarrage de l'application. Avec l'ajout de la ligne:
os.system("clear")
avant la ligne
print("Integrating with launcher")
le message "Intégration avec le programme de lancement" s'affiche maintenant dans terminal
.
Cependant, , il n'y a toujours pas de barre de progression visible dans la barre de lancement d'Unity .
Après avoir reconstruit le projet Quickly
en exécutant python setup.py build
et en déplaçant le fichier construit .desktop
dans le projet Quickly
situé entre /build/share/applications/
et ~/.local/share/applications
, l'icône de l'application et la barre de progression s'affichent correctement. dans la barre de lancement d'Unity. Une capture d'écran de l'intégration du lanceur est visible ci-dessous.
Le fichier .desktop doit être installé à l'emplacement où la bibliothèque bamf
en a connaissance.
Vous devriez pouvoir tester en copiant le fichier .desktop intégré (qui doit être créé à partir du fichier .desktop.in) dans votre dossier ~/.local/share/applications
et en exécutant update-desktop-database ~/.local/share/applications
, bien que l’exécution de cette commande ne soit pas nécessaires si votre application ne gère aucun type MIME.
La différence entre .desktop et .desktop.in réside dans le fait que le fichier .desktop.in est configuré pour être traduit et est traité par intltool lors de la construction afin que les traductions soient insérées, créant ainsi le fichier .desktop à partir du fichier .desktop.in. fichier.
De plus, je viens de remarquer une faute de frappe dans votre code:
self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")
Notez le "destkop" vs "bureau" qu'il devrait être. C’est peut-être le cas, si ce n’est pas une erreur de saisie. En supposant que votre code soit réellement exécuté, il s'agit d'un problème. Si ce n'est pas exécuté, alors c'est le problème. Vous pouvez ajouter une print('Integrating with launcher')
à la fonction add_launcher_integration à afficher. Il devrait apparaître sur le terminal lors de l'exécution.