web-dev-qa-db-fra.com

L'icône du lanceur personnalisé ouvre une deuxième icône générique

J'ai écrit un script dans python pour augmenter le volume de mon volume avec pactl. J'ai créé un fichier .desktop

[Desktop Entry]
Type=Application
Terminal=false
Name=Super Volume
Icon=/home/tyler/SuperVolume/icon.ico
Exec=/home/tyler/SuperVolume/SuperVolume.py

Tout allait bien

Launcher item with icon mais alors j'ai remarqué qu'il ne s'agissait pas d'ajouter la flèche blanche à mon icône mais d'ouvrir une icône générique et de placer la flèche dessus

The dreaded generic icon

Donc, si quelqu'un pouvait me dire comment changer cela, j'apprécierais vraiment que je googe beaucoup avant de demander, mais je n'utilisais peut-être pas les bons mots clés, je ne suis pas sûr.

7
SudoRmRf

À propos des fenêtres Tkinter

La fenêtre de votre image est une fenêtre Tkinter . Les fenêtres de Tkinter par défaut ne correspondent pas à l'icône du lanceur à moins que ne définisse spécifiquement le lanceur (fichier .desktop) de manière à correspondre au WM_CLASS de la fenêtre. Nous expliquons plus en détail comment faire cela.

cependant

Si vous ne définissez pas un WM_CLASS spécifique dans votre code python/Tkinter, toutes les fenêtres Tkinter ont le même WM_CLASS. Vous pouvez voir que si vous courez

xprop WM_CLASS

dans un terminal, appuyez sur Returnet cliquez ensuite sur la fenêtre Tkinter. Cela montrera:

WM_CLASS(STRING) = "tk", "Tk"

Cela signifie que si vous possédez éventuellement plusieurs applications Tkinter, elles apparaîtront toutes sous la même icône dans le lanceur. Ce serait un générique sauf si vous modifiez votre fichier .desktop.

Comment définir un WM_CLASS distinctif en python/Tkinter

Vous pouvez définir le WM_CLASS en le réglant comme suit:

#!/usr/bin/env python3
from tkinter import *

# set the WM_CLASS
win = Tk(className="applicationname")
# set the window title
win.wm_title("Test 123")
win.mainloop()

enter image description here

Ajoutez le WM_CLASS à votre fichier .desktop

Ajoutez la ligne suivante à votre fichier .desktop:

StartupWMClass=applicationname

applicationname est le nom que vous avez défini dans le code python/Tkinter.

3
Jacob Vlijm