web-dev-qa-db-fra.com

Comment ajouter une icône de lanceur pour le script python?

J'essaie d'ajouter une icône de lanceur pour un script personnalisé Python affichant une fenêtre Tkinter (emplacement du script: /home/hakon/my-tkapp.py):

#! /usr/bin/env python3
import tkinter as tk
root = tk.Tk(className='MyTkApp')
label = tk.Label(root, text="Hello World")
label.pack()
root.mainloop()

Le script est exécutable. J'utilise pyenv, donc si j'exécute ce qui suit à partir de gnome-terminal:

$ which python3
/home/hakon/.pyenv/shims/python3

J'ai créé un fichier de bureau (emplacement du fichier: ~/.local/share/applications/my-tk-app.desktop):

[Desktop Entry]
Type=Application
Terminal=false
Name=My Tk Application
Exec=/home/hakon/my-tkapp.py
Icon=/home/hakon/icons/my-tk-app-icon.png
StartupWMClass=MyTkApp

Pour l’icône, je viens (pour le test) de copier une des icônes standard:

cp /usr/share/icons/hicolor/48/apps/apport.png /home/hakon/icons/my-tk-app-icon.png

L'exécution de la commande desktop-file-validate sur le fichier du bureau ne génère aucun résultat. Le fichier du bureau doit donc être correct.

Cependant, lorsque je lance le script python à partir du terminal:

~/my-tkapp.py

J'ai toujours l'icône du point d'interrogation générique dans le lanceur.

Qu'est-ce que je regarde ici?

3
Håkon Hægland

Etant donné que votre question est bien documentée, nous pouvons trouver le problème :)

  • Dans votre application, vous définissez:

    root = tk.Tk(className='MyTkApp')
    
  • Maintenant, si vous ouvrez un terminal, tapez:

    $ xprop WM_CLASS
    

    et ensuite cliquez sur la fenêtre de votre application, il affiche:

    WM_CLASS(STRING) = "myTkApp", "Mytkapp"
    

Ceci est seulement différent de la classe de fenêtre que vous avez définie; les capitales sont différentes. La seule conclusion est que, pour une raison quelconque, la classe de fenêtre (format capital) que vous définissez n'est pas acceptée par le gestionnaire de fenêtres.

Quand j'ai changé votre lanceur pour qu'il corresponde à myTkApp:

StartupWMClass=myTkApp

cela fonctionne très bien (par commodité, j’ai mis l’icône firefox, car je n’ai pas votre icône):

[Desktop Entry]
Type=Application
Terminal=false
Name=My Tk Application
Exec=/home/jacob/Bureaublad/testapp.py
Icon=firefox
StartupWMClass=myTkApp

Le résultat:

enter image description here

4
Jacob Vlijm