Tkinter TclError: файл чтения растровых изображений ошибок

Я пытаюсь установить значок приложения (python3/tkinter) следующим образом:

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

независимо от того, что я делаю, я продолжаю получать сообщение об ошибке (Idle), говоря:

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

Что я делаю неправильно?

Ответы

Ответ 1

Проблема не в коде, а в значке. Я попытался создать xbm с другой программой, чем Gimp (редактор KDE), и хотя он выглядит ужасно уродливым, он показывает значок. Думаю, мне нужно найти создателя, который дает "понятный" значок для моей программы Python.


Изменить

Метод iconbitmap оказался только черно-белым, поэтому он был бесполезен.

После длительного поиска я нашел решение установить цвет значка приложения для Python 3 (в Linux). Я нашел здесь:

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

Ответ 2

Это старый вопрос, и в Интернете много чего написано об этом, но все это неверно или неполно, поэтому, убедившись, что он работает, я подумал, что было бы хорошо записать мой действующий рабочий код здесь.

Во-первых, вам нужно создать значок и сохранить его в двух форматах: Windows "ICO" и Unix "XBM". 64 х 64 - это хороший размер. XBM - это 1-битный формат - пиксели просто включены или выключены, поэтому нет цветов, нет серых. Linux-реализации tkinter принимают только XBM, хотя каждый рабочий стол Linux поддерживает настоящие значки, так что вам просто не повезло. Кроме того, спецификация XBM неоднозначна относительно того, представляют ли "включенные" биты черный или белый, поэтому вам может потребоваться инвертировать XBM для некоторых настольных компьютеров. Gimp хорош для их создания.

Затем, чтобы поместить значок в заголовок, используйте этот код (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")

root.mainloop()

Ответ 3

Я пробовал это, и я не мог заставить его работать с Windows 7.

Найдено исправление.

Используйте ответ Джейкоба, но файл должен быть .gif, если вы используете мою ОС (Windows 7).

Сделайте 64x64 gif, используя MS-краску, сохраните ее, используйте путь к файлу и бинго.

Ответ 4

Это позволит вам использовать PNG файлы в качестве значков, а также отображать цвет. Я тестировал его на Xubuntu 14.04, 32-бит с Python 3.4 (root - ваш объект Tk):

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

(Поиск справочника программы важен, если вы хотите, чтобы он искал test.png в одном месте во всех контекстах. os.path.join - это кросс-платформенный способ добавления test.png в каталог программы.)

Если вы измените True на False, то он не будет использовать тот же значок для окон, которые не являются главными.

Пожалуйста, дайте мне знать, если это работает на Windows и Mac.