Como adicionar o ícone do lançador para o script python?

3

Eu estou tentando adicionar um ícone de inicialização para um script Python personalizado mostrando uma janela do Tkinter (local do 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()

O script é executável. Estou usando pyenv , então, se eu executar o seguinte em gnome-terminal :

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

Eu criei um arquivo da área de trabalho (local do arquivo: ~/.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

Para o ícone, eu apenas (para fins de teste) copiei um dos ícones padrão:

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

A execução do comando desktop-file-validate no arquivo da área de trabalho não gera saída, portanto, o arquivo da área de trabalho deve estar OK.

No entanto, quando eu executo o script python do terminal:

~/my-tkapp.py

Ainda recebo o ícone de ponto de interrogação genérico no iniciador.

O que eu estou negligenciando aqui?

    
por Håkon Hægland 27.06.2017 / 10:49

1 resposta

3

Devido ao fato de que sua pergunta está bem documentada, podemos encontrar o problema:)

  • Na sua aplicação, você define:

    root = tk.Tk(className='MyTkApp')
    
  • Agora, se você abrir um terminal, digite:

    $ xprop WM_CLASS
    

    e, em seguida, clique na janela do seu aplicativo, ele mostra:

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

Isso é apenas não é o mesmo que a classe de janela que você definiu; as capitais são diferentes. A única conclusão é que, por algum motivo, a classe da janela (formato de capital) definida não é aceita pelo gerenciador de janelas.

Quando alterei seu iniciador para corresponder a myTkApp :

StartupWMClass=myTkApp

funciona bem (por conveniência, eu configuro o ícone do firefox, já que não tenho seu ícone):

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

O resultado:

    
por Jacob Vlijm 27.06.2017 / 11:16