Какие форматы файлов я могу использовать для иконок tkinter?

Я знаю, что это может быть очевидно, но в tkinter вы можете установить значок, но мне было очень трудно найти его. Я просто хотел узнать, нужно ли вам использовать .ico формат файла или, если есть способ использовать .png или же .jpeg файлы.

В настоящее время у меня есть

window = Tkinter.Tk()
window.title("Weclome!")
window.geometry("200x300")
window.wm_iconbitmap("Icon.ico")
window.configure(background = "Black")

Вот и все настройки, которые у меня есть, и я просто хочу узнать о строке 4:

window.wm_iconbitmap("Icon.ico") 

1 ответ

Начнем с чтения документации!

Документация на effbot.org гласит следующее относительно iconbitmap(bitmap=None)

Устанавливает или получает растровое изображение значка для использования при значении этого окна. Этот метод игнорируется некоторыми оконными менеджерами (включая Windows).

Обратите внимание, что этот метод может использоваться только для отображения монохромных значков. Чтобы отобразить цветной значок, поместите его в Label виджет и отображать его с помощью iconwindow метод вместо.

Такой же как wm_iconbitmap,

Так вот документация о iconwindow(window=None):

Устанавливает или получает окно значка для использования в качестве значка, когда это окно отображается в виде значка. Этот метод игнорируется некоторыми оконными менеджерами (включая Windows).

Такой же как wm_iconwindow,

window

The new icon window. If omitted, the current window is returned.

Согласно этой другой документации, которая на самом деле говорит то же самое, что и строки документации одноименного метода для tkinter в (как минимум) Python 2.7, 3.5 и 3.6:

wm_iconbitmap(self, bitmap=None, default=None)

Установите для растрового изображения для виджета значение bitmap, Вернуть растровое изображение, если ничего не задано.

Под Windows default Параметр может использоваться для установки иконки для виджета и любых потомков, для которых значок не установлен явно. default может быть относительным путем к .ico файл (пример: root.iconbitmap(default='myicon.ico')). См. Документацию Tk для получения дополнительной информации.

Итак, вот оригинальная документация Tk:

wm iconbitmap window ?bitmap?

Если указано растровое изображение, оно называет растровое изображение в стандартных формах, принятых Tk (см. Tk_GetBitmapручной ввод для деталей). Это растровое изображение передается диспетчеру окон для отображения в значке окна, и команда возвращает пустую строку. Если пустая строка указана для bitmap, тогда любой текущий растровый значок отменяется для window, Если bitmap указывается, то команда возвращает пустую строку. В противном случае он возвращает имя текущего растрового изображения значка, связанного с window или пустая строка, если window не имеет значка растрового изображения.

Из моего понимания Tcl, Вот window ваше окно верхнего уровня (или экземпляр Tk или же Toplevel).

В операционной системе Windows поддерживается дополнительный флаг:

wm iconbitmap window ?-default? ?image?

Если -default Если флаг установлен, значок применяется ко всем окнам верхнего уровня (существующим и будущим), к которым еще не применен какой-либо другой конкретный значок.

В дополнение к типам растровых изображений также допускается указание полного пути к любому файлу, который содержит допустимый значок Windows (обычно .ico или же .icr файлы), или любой файл, для которого оболочке назначен значок.

Сначала Tcl проверит, содержит ли файл значок, затем - назначенный значок, и, наконец, если это не удастся, проверит наличие растрового изображения.

Пока не очень конкретный и, следовательно, полезный ответ.


Мой вывод

iconbitmap Функция (или метод, в зависимости от языка программирования) должна использоваться для установки растрового изображения в окно, когда окно отображается в виде значка.

В Windows вам разрешено указывать полный путь к любому файлу, который содержит допустимый значок Windows, также принимается (обычно .ico или же .icr файлы), или любой файл, для которого оболочке назначен значок.

Итак, какие изображения являются растровыми изображениями?

  1. xbm а также xpm (для системы X Window)

    Согласно статье в Википедии, с которой я связал "растровое изображение" выше:

    Система X Window использует аналогичный xbm формат для черно-белых изображений, и xpm для цветных изображений....

  2. Формат файла BMP

  3. Формат Netpbm

  4. .wbmp

  5. ILBM

    ...

Таким образом, большинство форматов растровых файлов не являются кроссплатформенными! Другими словами, если кто-то говорит вам использовать xbm Изображение для значка, оно может не работать на вашей платформе, потому что xbm являются растровыми изображениями для X Window System.

Примечание: даже после этого ответа у вас все еще могут быть проблемы!


Другие возможные полезные статьи

Я тоже изо всех сил пытался найти ответ, но, наконец, я заглянул в исходный код idle3.6, где нашел следующий фрагмент кода:

# set application icon
icondir = os.path.join(os.path.dirname(__file__), 'Icons')
if system() == 'Windows':
    iconfile = os.path.join(icondir, 'idle.ico')
    root.wm_iconbitmap(default=iconfile)
else:
    ext = '.png' if TkVersion >= 8.6 else '.gif'
    iconfiles = [os.path.join(icondir, 'idle_%d%s' % (size, ext))
                 for size in (16, 32, 48)]
    icons = [PhotoImage(master=root, file=iconfile)
             for iconfile in iconfiles]
    root.wm_iconphoto(True, *icons)

Я просмотрел все файлы в папке idlelib для.ico и.png с помощью рыться программного обеспечения.

Итак, наконец, мне удалось заставить работать значок окна (в GNU-linux с TkVersion>=8.6) со следующими двумя строками:

icon = PhotoImage(master=root, file='icon.png')
root.wm_iconphoto(True, icon)

где я помещаю значок прямо в папку своего приложения.

Из кода простоя мне кажется, что в Windows по-прежнему поддерживаются только файлы.ico.

Другие вопросы по тегам