tkinter TclError: fout bij lezen van bitmapbestand

Ik probeer een toepassingspictogram (python3/tkinter) als volgt in te stellen:

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

wat ik ook doe, ik krijg steeds een foutmelding (Idle), waarin staat:

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

Wat doe ik verkeerd?

15
@Jacob Stupid question: Is jouw icoon eigenlijk op /home/jacob/.icons/qle_icon.ico? ;)
toegevoegd de auteur gary, de bron
...bedankt! werkte helaas ook niet, probeerde ook .png
toegevoegd de auteur Jacob Vlijm, de bron
@gary zeker geen domme vraag, en ik checkte een paar keer, als je zelf twijfelt wanneer dingen niet werken ...
toegevoegd de auteur Jacob Vlijm, de bron
Ik geloof dat een .ico -bestand hiervoor niet werkt (tenminste op Linux). Probeer in plaats daarvan een .xbm - of .xpm -bestand te gebruiken.
toegevoegd de auteur stranac, de bron

4 antwoord

Het probleem is niet de code, maar het pictogram. Ik heb geprobeerd een xbm te maken met een ander programma dan Gimp (een of andere KDE-pictogramBewerkor) en hoewel het er angstaanjagend lelijk uitziet, wordt er wel een pictogram weergegeven. Ik denk dat ik een maker moet vinden die een "begrijpelijk" pictogram geeft voor mijn Python-programma.


Bewerk

De iconbitmap -methode bleek alleen zwart-wit te zijn, dus het was toch nutteloos.

Na een lange zoektocht vond ik de oplossing om de kleur in te stellen van het pictogram van een toepassing voor Python 3 (onder Linux). Ik vond het hier :

root = Tk()
img = PhotoImage(file='your-icon')
root.tk.call('wm', 'iconphoto', root._w, img)
48
toegevoegd
Ik probeer dit te doen, maar ik krijg dit 'Traceback (meest recente oproep laatste): Bestand' C: \ Python27 \ Calc.pyw ', regel 58, in img = PhotoImage (bestand =' icon! .ico ') Bestand "C: \ Python27 \ lib \ lib-tk \ Tkinter.py", regel 3244, in init Image .__ init __ (zelf, 'foto', naam, cnf, master, ** kw) Bestand "C: \ Python27 \ lib \ lib-tk \ Tkinter.py", regel 3200, in init self.tk.call (('afbeelding', 'create', imgtype, naam,) + opties) TclError: kon gegevens in afbeeldingsbestand "icon! .ico" niet herkennen
toegevoegd de auteur Serial, de bron
Is uw pictogram gewoon verkeerd geformatteerd? Heb je png geprobeerd?
toegevoegd de auteur Zaur Nasibov, de bron
Werk ook voor Python2.7! Ik was hier al meerdere dagen naar op zoek. Dankje
toegevoegd de auteur ericc, de bron
De documentatie van Tkinter.PhotoImage zegt dat het alleen gif of PPM/PGM geformatteerde afbeeldingen accepteert. Op een linux-machine werkte het voor mij met een .gif , maar niet met een .png .
toegevoegd de auteur esmit, de bron
werkt ook in Windows met een .png . gebruik PIL-kussen-2.5.1-win32-py27.
toegevoegd de auteur minghua, de bron
U moet root.iconphoto (True, img) gebruiken in plaats van de aanroep van tk.
toegevoegd de auteur Morgoth, de bron

Dit is een oude vraag, en er is veel dingen over geschreven op het web, maar het is allemaal onjuist of onvolledig. Dus nadat ik het had laten werken, dacht ik dat het goed zou zijn om mijn huidige werkcode hier op te nemen.

Eerst moet u een pictogram maken en dit opslaan in twee indelingen: Windows "ico" en Unix "xbm". 64 x 64 is een goede maat. XBM is een 1-bit-indeling - pixels net aan of uit, dus geen kleuren, geen grijstinten. Linux-implementaties van tkinter accepteren alleen XBM, hoewel elke Linux-desktop echte pictogrammen ondersteunt, dus je hebt gewoon pech daar. De XBM-specificatie is ook dubbelzinnig over de vraag of "aan" -bits zwart of wit vertegenwoordigen, dus moet u de XBM mogelijk inverteren voor sommige desktops. Gimp is goed voor het maken hiervan.

Gebruik vervolgens deze code (Python 3) om het pictogram in uw titelbalk te plaatsen:

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")
12
toegevoegd
Wat is in godsnaam dit echte leven? Tk op Linux ondersteunt alleen vuilnisiconen? En als bonus ondersteunt het geen native Gtk- of qt-widgets. Hoe moet iemand het als een GUI-bibliotheek serieus nemen?
toegevoegd de auteur Hubro, de bron
Hoe zit het met de opdracht iconphoto?
toegevoegd de auteur Yuxiang Wang, de bron
Op Linux werkt het niet. Kun je updaten?
toegevoegd de auteur Sonu Kumar, de bron
Je zult me ​​veel meer informatie moeten geven dan dat. Zoals me wijzen op je code en je pictogrambestand.
toegevoegd de auteur Lee Daniel Crocker, de bron

Ik heb dit geprobeerd en ik kon het niet laten werken met Windows 7.

Een oplossing gevonden.

Gebruik Jacob's antwoord, maar het bestand moet een .gif zijn als je mijn besturingssysteem gebruikt, (Windows 7) verschijnt het.

Maak een 64x64 gif met MS-verf, bewaar het, gebruik het bestandspad en bingo, werkt.

6
toegevoegd
werkt ook op ubuntu, afbeelding moet een gif zijn
toegevoegd de auteur Will Munn, de bron

Hiermee kunt u PNG-bestanden als pictogrammen gebruiken en wordt kleur weergegeven. Ik heb het getest op Xubuntu 14.04, 32-bit met Python 3.4 ( root is je Tk object):

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

(Het vinden van een programmamap is belangrijk als u in alle contexten wilt zoeken naar test.png op dezelfde locatie. os.path.join is een platformonafhankelijke manier om voeg test.png toe aan de programmamap.)

Als u True to False verandert, zal het niet hetzelfde pictogram gebruiken voor vensters die niet de hoofdsymbool zijn.

Laat het me weten als dit werkt op Windows en Mac.

4
toegevoegd