@TomRiddle
Я здесь, потому что ничего не нагуглил XD

Как создать функцию по замене рисунка в виджете Tkinter?

В самой верхней части GUI приложения есть рисунок (так сказать декоративный header). Хочу в меню задать функцию по его замене, чтобы пользователь мог сам выбирать рисунок из предложенных ему. Написал функцию, но она срабатывает только после перезагрузки приложения.

Вот фрагмент кода по загрузке хедера при запуске приложения:

topFrame = Frame(root, height=100)
try:
    with open('SysFiles/ChosenHeader.txt', 'r') as ch:
        header_img = ch.read().strip()
except:
    header_img = 'default.png'
topImg = PhotoImage(file=header_img)
l = Label(topFrame, image=topImg)
l.pack(expand=1, fill=BOTH)
topFrame.pack(fill=X)


В меню есть вкладки для замены хэдера, вот код одной из них:

header_change_menu.add_command(label='Рик и Морти', command = lambda: STYLES.change_header(header_img, 'path_to_new_img.png'))


А вот сама функция по замене:

def change_header(var_img,  header_name):
    with open('SysFiles/ChosenHeader.txt', 'w') as ct:
        ct.write(header_name.strip())
    var_img = header_name


Как исправить код, чтобы рисунок в хедере менялся сразу после нажатия на соответствующую кнопку в меню, а не после перезагрузки программы?
  • Вопрос задан
  • 396 просмотров
Решения вопроса 1
@o5a
Сложно вот так сказать, куда именно добавить изменения среди этих кусков кода, но чтобы картинка сразу изменилась, в управляющей функции надо использовать label.configure
# запуск изменения картинки
topImg = PhotoImage(file="new_img.png")
l.configure(image=topImg)
l.image = topImg
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы