Domanda

Qualcuno sa come fare l'icona non compare? Sto cercando un modo per avere nessuna icona a tutti.

È stato utile?

Soluzione

Su Windows

Fase uno:

Crea un'icona trasparente utilizzando un editor di icone, o un sito come rw-designer . Salvarlo come transparent.ico.

Fase due:

from tkinter import *

tk = Tk()
tk.iconbitmap(default='transparent.ico')
lab = Label(tk, text='Window with transparent icon.')
lab.pack()
tk.mainloop()

On Unix

Qualcosa di simile, ma utilizzando un'icona xbm.

Altri suggerimenti

Simile alla risposta accettata (con l'aria di essere più brutta):

import tkinter
import tempfile

ICON = (b'\x00\x00\x01\x00\x01\x00\x10\x10\x00\x00\x01\x00\x08\x00h\x05\x00\x00'
        b'\x16\x00\x00\x00(\x00\x00\x00\x10\x00\x00\x00 \x00\x00\x00\x01\x00'
        b'\x08\x00\x00\x00\x00\x00@\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
        b'\x00\x01\x00\x00\x00\x01') + b'\x00'*1282 + b'\xff'*64

_, ICON_PATH = tempfile.mkstemp()
with open(ICON_PATH, 'wb') as icon_file:
    icon_file.write(ICON)

tk = tkinter.Tk()
tk.iconbitmap(default=ICON_PATH)
label = tkinter.Label(tk, text="Window with transparent icon.")
label.pack()

tk.mainloop()

E 'solo crea il file al volo, invece, in modo da non dover portare un file in più intorno. Utilizzando lo stesso metodo, si potrebbe anche fare un'icona '.xbm' per Unix.

Modifica: Il ICON può essere ridotto anche ulteriormente grazie a @Magnus Hoff :

import base64, zlib

ICON = zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
    'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))

Per quanto ne so, la più vicina si arriva a un'icona "vuoto" utilizza uno che è lo stesso colore della barra del titolo della finestra. Ma poi di nuovo un sacco di utenti utilizzano diversi temi di colore, in modo da non andare oltre molto bene.

Tuttavia, se si utilizza py2exe si può usare qualcosa di simile a Resource Hacker per scambiare l'icona. Ma in programmi Python Stato del testo, il meglio che puoi fare è sostituire. Sorta di come i file Jar utilizzare l'icona java, applicazioni Tkinter avrà l'icona TK. Dopo tutto ... come Java, la vostra applicazione è in corso di traduzione da un programma intermedio. Dal momento che un altro programma è in esecuzione il codice, è necessario modificare tale altro programma. Fortunatamente Python / Tk è un po 'più flessibile della JVM in termini di icone in modo da poter sostituire l'icona. Ma la rimozione del tutto al momento non è un'opzione.

-John

Sulla base delle risposte precedenti ho usato questa soluzione:

from PIL import ImageTk
import zlib,base64
import Tkinter

icon=zlib.decompress(base64.b64decode('eJxjYGAEQgEBBiDJwZDBy'
'sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc='))
root=Tkinter.Tk()
image=ImageTk.PhotoImage(data=icon)
root.tk.call('wm', 'iconphoto', root._w, image)
root.mainloop()

Aggiornamento:

Il codice leggermente modificata (clausola try anziché if TkVersion) produce un'icona trasparente (no) su:

Linux (Mint 18.1), Python 2.7

Linux (Mint 18.1), Python 3.5.1

di Windows 10, Python 2.7.13

Si produce un'icona nera (non funziona) su:

di Windows 8.1, Python 3.6

Un po 'vecchia questione, ma le soluzioni non funzionavano per me. Ho trovato una soluzione parziale semplice, con una domanda di follow-up della mia.

La soluzione parziale (Tk 8.5, vedi sotto) - con il metodo del blank() PhotoImage:

from Tkinter import *

root=Tk()

icon=PhotoImage(height=16, width=16)
icon.blank()

root.tk.call('wm', 'iconphoto', self.master._w, icon)

root.mainloop()

In Python 2.7, Windows 10, questo funziona bene, producendo il desiderato "nessuna icona" per la nuova app.

Tuttavia, su Python 3.6, Win 8.1, questo inceppa l'interfaccia grafica, che credo è legato alla recente Tk 8.6, e anche se ho trovato che il nuovo 8.6 notazione di utilizzare wm_iconphoto() fa passare unjammed in questo caso:

try:
    from tkinter import *
except:
    from Tkinter import * 

root=Tk()

#Identical for Py2.7/Tk8.5 and Py3.5/Tk8.6
icon=PhotoImage(height=16, width=16)
icon.blank()

#Picking a notaion based on Tk version to avoid jamming
try:
    root.wm_iconphoto('True', icon)   #New Tk 8.6 style        
else:
    #Jams Python 3.5 with Tk 8.6 on Windows
    root.tk.call('wm', 'iconphoto', self.master._w, icon)   



root.mainloop()

Si produce un'icona nera sul 3.6, invece di quello trasparente in caso di 2.7 / 8.5.

Ci potrebbe essere un modo per impostare le uno trasparente pixel alla volta utilizzando "trasparenza set" - http://wiki.tcl.tk/1449

Tuttavia, non so se è ancora fattibile tramite Tkinter. Dio aiuta gli audaci, qualcun altro turno però?

domanda aggiornato :? Perché non fa questo lavoro su Py3.6 / Windows

In alternativa al soluation @ di ubomb per aggiungere immagini personalizzate utilizzando Tkinter.PhotoImage di supporto integrato per l'elaborazione di immagini .gif.

Da file:

icon = Tkinter.PhotoImage(file="logo.gif")

da Base64:

gif_base64_string = """ R0lGODdhEAAQAIcAAAAAAAEBAQICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4O Dg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEh ... 4B8AAP9Ci/4HoLTpfwD+qV4NoHVAADs= """

icon = Tkinter.PhotoImage(data=gif_base64_string)

effbot.org link per maggiori informazioni:

http://effbot.org/tkinterbook/photoimage.htm

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top