Невозможно использовать изображение кнопки в классе customtkinter фреймаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно использовать изображение кнопки в классе customtkinter фрейма

Сообщение Anonymous »

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

Код: Выделить всё

  File "c:\Users\user\Desktop\app\app\__main__.py", line 33, in __init__
self.sidebar_frame = SideBarFrame(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\user\Desktop\app\app\frames\sidebar.py", line 34, in __init__
self.settings_button = ctk.CTkButton(self, hover=False, width=50, text="", image=ctk.CTkImage(Image.open("assets/add-dark.png")), command=self.show_settings_frame, fg_color="transparent", border_width=0)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Desktop\app\.venv\Lib\site-packages\customtkinter\windows\widgets\ctk_button.py", line 106, in __init__
self._draw()
File "C:\Users\user\Desktop\app\.venv\Lib\site-packages\customtkinter\windows\widgets\ctk_button.py", line 264, in _draw
self._update_image()  # set image
^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Desktop\app\.venv\Lib\site-packages\customtkinter\windows\widgets\ctk_button.py", line 173, in _update_image
self._image_label.configure(image=self._image.create_scaled_photo_image(self._get_widget_scaling(),
File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 1721, in configure
return self._configure('configure', cnf, kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py", line 1711, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: image "pyimage1" doesn't exist
Мой объектно-ориентированный код:

Код: Выделить всё

class SideBarFrame(ctk.CTkFrame):
def __init__(self, master, **kwargs) -> None:
super().__init__(master, **kwargs)
self.settings_button = ctk.CTkButton(self, hover=False, width=50, text="", image=settings_icon,
command=self.show_settings_frame, fg_color="transparent", border_width=0)
...

Функция для CTkImage:

Код: Выделить всё

import os
def load_icon(self, path, path_for_dark: str | None = None) -> ctk.CTkImage:
light_image, dark_image = Image.open(path), None
print(os.path.exists(path))
if path_for_dark:
dark_image = Image.open(path_for_dark)
return ctk.CTkImage(light_image, dark_image, size=(30, 30))

Код: Выделить всё

print(os.path.exists(path))
- всегда возвращает True
Однако в стандартном коде, когда я пишу не объектно-ориентированный код, код стабильно работает, вот так:

Код: Выделить всё

sidebar = ctk.CTkFrame(app, corner_radius=0)
sidebar.grid(row=0, column=0, sticky="ns")

icon1 = load_icon("assets/settings1-dark.png", "assets/settings1.png")

button1 = ctk.CTkButton(sidebar, hover=False, width=50, text="", image=icon1, , fg_color="transparent", hover_color="lightgray", border_width=0)
Та же функция load_icon, тот же каталог, те же параметры и т. д.
Кроме того, я пытался сразу использовать CTkImage как аргумент изображения :

Код: Выделить всё

self.settings_button = ctk.CTkButton(self, hover=False, width=50, text="", image=ctk.CTkImage(Image.open("assets/add-dark.png")), command=self.show_settings_frame, fg_color="transparent", border_width=0)
Это не работает.


Подробнее здесь: https://stackoverflow.com/questions/791 ... nter-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»