Какие форматы файлов я могу использовать для иконок 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
файлы), или любой файл, для которого оболочке назначен значок.
Итак, какие изображения являются растровыми изображениями?
xbm
а такжеxpm
(для системы X Window)Согласно статье в Википедии, с которой я связал "растровое изображение" выше:
Система X Window использует аналогичный
xbm
формат для черно-белых изображений, иxpm
для цветных изображений.....wbmp
...
Таким образом, большинство форматов растровых файлов не являются кроссплатформенными! Другими словами, если кто-то говорит вам использовать 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.