toplevel - tkinter python example
Eliminar el ícono de TK en una ventana de Tkinter (5)
En Windows
Paso uno:
Cree un icono transparente utilizando un editor de iconos o un sitio como rw-designer . Guárdelo como transparent.ico
.
Segundo paso:
from tkinter import *
tk = Tk()
tk.iconbitmap(default=''transparent.ico'')
lab = Label(tk, text=''Window with transparent icon.'')
lab.pack()
tk.mainloop()
En Unix
Algo similar, pero usando un icono de xbm
.
¿Alguien sabe cómo hacer que el ícono no aparezca? Estoy buscando una forma de no tener ningún icono.
En base a respuestas anteriores, utilicé esta solución:
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()
Por lo que yo sé, lo más cerca que llegarás a un ícono "en blanco" es usar uno que sea del mismo color que la barra de título de la ventana. Pero, de nuevo, muchos usuarios utilizan diferentes temas de color, por lo que no van a funcionar muy bien.
Sin embargo, si usas py2exe puedes usar algo como Resource Hacker para cambiar el ícono. Pero en el estado de texto de los programas de python, lo mejor que puede hacer es reemplazar. Más o menos como los archivos Jar usan el ícono de java, las aplicaciones de tkinter tendrán el ícono de TK. Después de todo ... como Java, su aplicación está siendo traducida por un programa intermedio. Como otro programa ejecuta su código, debe modificar ese otro programa. Afortunadamente, python / tk es un poco más flexible que la JVM en términos de iconos, por lo que puedes reemplazar el ícono. Pero eliminarlo completamente no es actualmente una opción.
-John
Similar a la respuesta aceptada (con la estafa de ser más feo):
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()
Simplemente crea el archivo sobre la marcha en su lugar, por lo que no tiene que cargar un archivo adicional. Usando el mismo método, también podría hacer un ícono ''.xbm'' para Unix.
Editar: El ICON
se puede acortar aún más gracias a @Magnus Hoff :
import base64, zlib
ICON = zlib.decompress(base64.b64decode(''eJxjYGAEQgEBBiDJwZDBy''
''sAgxsDAoAHEQCEGBQaIOAg4sDIgACMUj4JRMApGwQgF/ykEAFXxQRc=''))
Actualizar:
El código ligeramente modificado (cláusula try
lugar de if TkVersion
) produce un icono transparente (no) en:
Linux (Mint 18.1), Python 2.7
Linux (Mint 18.1), Python 3.5.1
Windows 10, Python 2.7.13
Produce un icono negro (no funciona) en:
Windows 8.1, Python 3.6
Una pregunta bastante antigua, pero las soluciones no me funcionaban. Encontré una solución parcial simple, con una pregunta de seguimiento propia.
La solución parcial (Tk 8.5, ver abajo) - usando el método en 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()
En Python 2.7, Windows 10, esto funciona bien, produciendo el "no icono" deseado para su nueva aplicación.
Sin embargo, en Python 3.6, Win 8.1, esto atasca la GUI, que creo que está relacionado con el Tk 8.6 más nuevo, y aunque encontré que la nueva notación 8.6 de usar wm_iconphoto()
pasa sin bloquearse en este 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()
Produce un icono negro en 3.6, en lugar del transparente en caso de 2.7 / 8.5.
Puede haber una manera de establecer los píxeles transparentes uno por uno usando "transparencia establecida" - http://wiki.tcl.tk/1449
Sin embargo, no sé si es posible mediante Tkinter. Aunque Dios favorece a los audaces, ¿le toca a alguien más?
Pregunta actualizada : ¿Por qué esto no funciona en Py3.6 / Windows?