tkinter TclError: errore nella lettura del file bitmap

Sto cercando di impostare un’icona dell’applicazione (python3 / tkinter) in questo modo:

Interface() root.title("Quicklist Editor") root.iconbitmap('@/home/jacob/.icons/qle_icon.ico') root.resizable(0, 0) root.mainloop() 

non importa quello che faccio, continuo a ricevere un messaggio di errore (inattivo), dicendo:

 return self.tk.call('wm', 'iconbitmap', self._w, bitmap) _tkinter.TclError: error reading bitmap file "/home/jacob/.icons/qle_icon.ico" 

Che cosa sto facendo di sbagliato?

Il problema non è il codice, ma l’icona. Ho provato a creare un xbm con un altro programma rispetto a Gimp (un certo editor di icone di KDE), e anche se sembra terribilmente brutto, mostra un’icona. Credo di dover trovare un creatore che dia un’icona “comprensibile” per il mio programma Python.


modificare

Il metodo iconbitmap si è rivelato solo in bianco e nero, quindi in fin dei conti era inutile.

Dopo una lunga ricerca, ho trovato la soluzione per impostare il colore dell’icona di un’applicazione per Python 3 (su Linux). L’ho trovato qui :

 root = Tk() img = PhotoImage(file='your-icon') root.tk.call('wm', 'iconphoto', root._w, img) 

Questa è una vecchia domanda, e sul web ci sono molte cose scritte, ma tutto ciò è errato o incompleto, quindi, dopo averlo fatto funzionare, ho pensato che sarebbe stato utile registrare qui il mio codice di lavoro effettivo.

Innanzitutto, dovrai creare un’icona e salvarla in due formati: Windows “ico” e Unix “xbm”. 64 x 64 è di buone dimensioni. XBM è un formato a 1 bit – pixel solo on o off, quindi nessun colore, nessun grigio. Le implementazioni Linux di tkinter accettano solo XBM anche se tutti i desktop Linux supportano icone reali, quindi sei sfortunato. Inoltre, la specifica XBM è ambigua se i bit “on” rappresentano il bianco o il nero, quindi potrebbe essere necessario invertire XBM per alcuni desktop. Gimp è buono per la creazione di questi.

Quindi per inserire l’icona nella barra del titolo, usa questo codice (Python 3):

 import os from tkinter import * from tkinter.ttk import * root = Tk() root.title("My Application") if "nt" == os.name: root.wm_iconbitmap(bitmap = "myicon.ico") else: root.wm_iconbitmap(bitmap = "@myicon.xbm") 

Ho provato questo, e non ho potuto farlo funzionare con Windows 7.

Trovato una soluzione.

Usa la risposta di Jacob, ma il file deve essere un .gif se stai usando il mio sistema operativo (Windows 7).

Crea una gif 64×64 usando vernice MS, salvala, usa il percorso del file e il bingo, funziona.

Questo ti permetterà di usare i file PNG come icone, e renderizza il colore. L’ho provato su Xubuntu 14.04, 32-bit con Python 3.4 ( root è il tuo object Tk ):

 import sys, os program_directory=sys.path[0] root.iconphoto(True, PhotoImage(file=os.path.join(program_directory, "test.png"))) 

(Trovare la directory del programma è importante se si desidera cercare test.png nella stessa posizione in tutti i contesti. os.path.join è un modo multipiattaforma per aggiungere test.png alla directory del programma.)

Se cambi True in False, non utilizzerà la stessa icona per Windows che non è quella principale.

Per favore fatemi sapere se questo funziona su Windows e Mac.