Пытаюсь добавить изображение bmp в виджет ScrolledText, и он говорит, что его не существует (Tkinter)

#python #user-interface #tkinter

Вопрос:

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

_кинтер_.Ошибка TclError: изображение «<PIL.BmpImagePlugin.BmpImageFile режим изображения=Размер RGB=32×32 при 0x19B2FA18EB0>» не существует

Вот соответствующий код:

 def get_icon(exe):
    ico_x = win32api.GetSystemMetrics(win32con.SM_CXICON)
    ico_y = win32api.GetSystemMetrics(win32con.SM_CYICON)

    large, small = win32gui.ExtractIconEx(exe, 0)
    win32gui.DestroyIcon(small[0])

    hdc = win32ui.CreateDCFromHandle(win32gui.GetDC(0))
    hbmp = win32ui.CreateBitmap()
    hbmp.CreateCompatibleBitmap(hdc, ico_x, ico_y)
    hdc = hdc.CreateCompatibleDC()

    hdc.SelectObject(hbmp)
    hdc.DrawIcon((0, 0), large[0])

    hbmp.SaveBitmapFile(hdc, 'icon.bmp')

    img = Image.open("icon.bmp")

    return img

text_area = ScrolledText(root,
                            width = 40,
                            height = 40,
                            font = ("Times New Roman",
                                    25))

img = get_icon("C:Program FilesBraveSoftwareBrave-BrowserApplicationBrave.exe")
text_area.image_create("current", padx=5, pady=5, image=ImageTk.PhotoImage(img))
text_area.place(relx=0.2, rely=0.1, relwidth=0.5, relheight=0.5, anchor='s')
 

Есть какие-нибудь идеи?

Комментарии:

1. Если у вас есть несколько экземпляров tk.Tk() , попробуйте добавить master=text_area в ImageTk.PhotoImage(img)

2. @TheLizzard У меня есть только один экземпляр, и он корневой.

3. Вы должны сохранить ссылку на PhotoImage объект, чтобы он продолжал существовать — например, в качестве глобальной переменной.

4. Спасибо @jasonharper, я сделал это, и теперь это не дает никаких ошибок. К сожалению, изображение не появляется.

5. Попробуйте использовать ссылку и другие координаты для места(например relx=0.5, rely=0.5 ), или pack() .