Как настроить значок окна с помощью Tkinter? - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь настроить иконку окна, чтобы она отображалась рядом с названием словаря, который я делаю. Когда я запускаю код, я получаю следующую проблему:

Traceback (most recent call last):
  File "/Users/sergioley-languren/Latin_app/windows.py", line 20, in <module>
    window.iconphoto(False, tk.PhotoImage(file='/Users/sergioley-languren/home/Latin_app/Logo.jpeg'))
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 4061, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 4006, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
_tkinter.TclError: couldn't recognize data in image file "/Users/sergioley-languren/Latin_app/Logo.jpeg"

Когда я пытался использовать функцию tkinter iconbitmap с файлом .jpeg, преобразованным в изображение .ico, это работало, но я получил значок пустой страницы вместо. Код ниже - это проблемный c код:

### Imports
import tkinter as tk
from tkinter import *
from pathlib import Path

##Extra Code
home = print(Path.home())
### Application screen code
window = Tk()

##Frame
frame1 = Frame(window)
frame1.pack()

## Window Title
window.title("Latin Unit 1 Dictionary - Based on Orion Academy Latin I , Unit 1")
window.geometry('1110x950')

#App Icon
window.iconphoto(False, tk.PhotoImage(file='/Users/sergioley-languren/home/Latin_app/Logo.jpeg'))

## Window Main Loop
window.mainloop()

Может кто-нибудь сказать мне, как это исправить? (Если это поможет, я использую MacOs Catilina.)

1 Ответ

1 голос
/ 13 марта 2020

tkinter.PhotoImage поддерживает только GM, PPM, GIF, PNG изображение. Ваше изображение JPEG, оно наверняка вызовет исключение.

Есть несколько решений, но прямой способ - изменить расширение изображения на ico и используйте iconbitmap()

from PIL import Image

img = Image.open(r"xxx.jpeg") # your jpeg image path
img.save(r"Icon.ico")

Это создаст новое ico изображение на вашем текущем пути.

Тогда вы можете использовать iconbitmap('Icon.ico') напрямую.

...