O ícone do iniciador personalizado abre um segundo ícone genérico

6

Eu escrevi um script em python para aumentar o volume usando o pactl. Eu fiz um arquivo .desktop

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

Tudo estava bem

mas então eu notei que não estava adicionando a seta branca ao meu ícone, mas abrindo um ícone genérico e colocando a seta sobre isso

Então, se alguém puder me dizer como mudar isso, eu realmente aprecio isso. Eu pesquisei muito antes de perguntar aqui, mas talvez não estivesse usando as palavras corretas, não tenho certeza.

    
por SudoRmRf 14.04.2017 / 23:51

1 resposta

2

Sobre as janelas do Tkinter

A janela da sua imagem é uma janela Tkinter . As janelas do Tkinter, por padrão, não correspondem ao ícone do inicializador , a menos que você defina especificamente o ativador ( .desktop file) para corresponder à WM_CLASS da janela. Mais abaixo é explicado como fazer isso.

no entanto

Se você não definir um WM_CLASS específico no seu código python / Tkinter , todas as janelas Tkinter terão o mesmo WM_CLASS . Você pode ver que se você executar

xprop WM_CLASS

em um terminal, pressione Return e, em seguida, clique na janela Tkinter . Isso mostrará:

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

Isso significa que, se você tiver vários aplicativos Tkinter , todos eles aparecerão sob o mesmo ícone no iniciador. Isso seria um genérico , a menos que você edite seu arquivo .desktop .

Como definir um WM_CLASS distintivo em python / Tkinter

Você pode definir o WM_CLASS definindo-o abaixo:

#!/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()

Adicione o WM_CLASS ao seu arquivo .desktop

Adicione a seguinte linha ao seu arquivo .desktop :

StartupWMClass=applicationname

em que applicationname é o nome que você definiu no código python / Tkinter .

    
por Jacob Vlijm 18.04.2017 / 18:30