iconbitmap icon python windows-7 python-3.x tkinter favicon

iconbitmap tkinter python 3



Establecer icono de ventana (7)

Ambos códigos funcionan bien conmigo en python 3.7 ... la esperanza también te servirá

import tkinter as tk m=tk.Tk() m.iconbitmap("myfavicon.ico") m.title("SALAH Tutorials") m.mainloop()

y no olvides mantener "myfavicon.ico" en la misma carpeta donde está presente tu archivo de script de proyecto

Otro método

from tkinter import * m=Tk() m.iconbitmap("myfavicon.ico") m.title("SALAH Tutorials") m.mainloop()

[* NOTA: - Python versión-3 funciona con tkinter y debajo de la versión-3, es decir, la versión 2 funciona con Tkinter]

Cuando traté de cambiar el ícono de la ventana en la esquina superior izquierda del feo rojo "TK" a mi propio favicon usando el siguiente código, Python lanzó un error:

from tkinter import * root = Tk() #some buttons, widgets, a lot of stuff root.iconbitmap(''favicon.ico'')

Esto debería establecer el ícono a ''favicon.ico'' (según muchas publicaciones del foro en toda la web). Pero desafortunadamente, todo lo que esta línea hace es arrojar el siguiente error:

Traceback (most recent call last): File "d:/ladvclient/mainapp.py", line 85, in <module> root.iconbitmap(bitmap=''favicon.ico'') File "C:/Python33/lib/tkinter/__init__.py", line 1637, in wm_iconbitmap return self.tk.call(''wm'', ''iconbitmap'', self._w, bitmap) _tkinter.TclError: bitmap "favicon.ico" not defined

Lo que ya hice

  • Revisé el camino - todo es 100% correcto
  • Probé con otros formatos de archivo, como .png o .bmp , ninguno funcionó
  • Busqué este problema en muchos sitios web

Y para el tercer punto, effbot.org, mi sitio favorito sobre Tkinter, me dijo que Windows ignora la función iconbitmap . ¡Pero esto no explica por qué arroja un error!

Hay algunas formas "hackish" para evitar ese problema, pero ninguno de ellos está escrito para Python 3.x.

Entonces mi última pregunta es: ¿hay alguna forma de obtener un icono personalizado usando Python 3.xy Tkinter?

Además, no me digas que debería usar otra biblioteca GUI. Quiero que mi programa funcione en todas las plataformas. También quiero una versión codificada, no una solución py2exe o sth .


Asegúrese de que el archivo .ico no esté dañado también. Obtuve el mismo error que desapareció cuando probé un archivo .ico diferente.


De ninguna manera lo que aquí se sugiere funciona: el error "bitmap xxx no definido" siempre está presente. Y sí, establecí el camino correcto para ello.

Lo que funcionó es esto:

imgicon = PhotoImage(file=os.path.join(sp,''myicon.gif'')) root.tk.call(''wm'', ''iconphoto'', root._w, imgicon)

donde sp es la ruta del script, y rootee la ventana raíz de Tk.

Es difícil entender cómo funciona (lo copié descaradamente de fedoraforums ) pero funciona


Esto funciona para mí con Python3 en Linux:

import tkinter as tk # Create Tk window root = tk.Tk() # Add icon from GIF file where my GIF is called ''icon.gif'' and # is in the same directory as this .py file root.tk.call(''wm'', ''iconphoto'', root._w, tk.PhotoImage(file=''icon.gif''))


No debe tener favicon.ico en la misma carpeta que su script o, concretamente, en su ruta. Ponga la ruta completa. Por ejemplo, esto funciona:

from tkinter import * root = Tk() root.iconbitmap(r''c:/Python32/DLLs/py.ico'') root.mainloop()

Pero esto explota con tu mismo error:

from tkinter import * root = Tk() root.iconbitmap(''py.ico'') root.mainloop()


Por lo tanto, parece que root.iconbitmap() solo admite un directorio fijo.
sys.argv[0] devuelve el directorio desde el que se leyó el archivo, por lo que un código simple funcionaría para crear un directorio fijo.

import sys def get_dir(src): dir = sys.argv[0] dir = dir.split(''/'') dir.pop(-1) dir = ''/''.join(dir) dir = dir+''/''+src return dir

Esta es la salida

>>> get_dir(''test.txt'') ''C:/Users/Josua/Desktop/test.txt''

EDITAR:
El único problema es que este método no funciona en Linux

josua@raspberrypi:~ $ python Python 2.7.9 (default, Sep 17 2016, 20:26:04) [GCC 4.9.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.argv[0] '''' >>>


#!/usr/bin/env python import tkinter as tk class AppName(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master) self.grid() self.createWidgets() def createWidgets(self): self.quitButton = tk.Button(self, text=''Quit'', command=self.quit) self.quitButton.grid() app = AppName() app.master.title(''Title here ...!'') app.master.iconbitmap(''icon.ico'') app.mainloop()

¡debería funcionar así!