Tkinter. Не добавляется изображение в Canvas

xkrollz

Новичок
Пользователь
Май 18, 2020
2
0
1
Если завернуть скрипт открытия изображения в функцию, то изображение не открывается. Если не заворачивать - то открывается. В чем может быть проблема?

OS Windows 10 x64 Home
Python 3.8.2
Package Version
------------------- ----------
certifi 2020.4.5.1
cffi 1.14.0
chardet 3.0.4
cryptography 2.9.2
cx-Freeze 6.1
decorator 4.4.2
future 0.18.2
idna 2.9
Pillow 7.1.2
pip 20.1
pycparser 2.20
pyTelegramBotAPI 3.7.1
python-telegram-bot 12.7
requests 2.23.0
setuptools 41.2.0
six 1.14.0
tornado 6.0.4
urllib3 1.25.9

Мой код:

Python:
from tkinter import *
from tkinter import filedialog as fd
from PIL import Image, ImageTk

root = Tk()
root.geometry('600x400')
c = Canvas(root, width=400, height=400)
c.grid()

#def insertImage():
image_name = fd.askopenfilename()
original_image = Image.open(image_name)
resize_img = original_image.resize((400, 400))
image = ImageTk.PhotoImage(resize_img)
c.create_image(200, 200, image=image)

#b1 = Button(text="Открыть", command=insertImage)
#b1.grid(row=0, column=1)
 

Вложения

  • Функция.png
    Функция.png
    68,1 КБ · Просмотры: 5
  • Без функции.png
    Без функции.png
    122 КБ · Просмотры: 5

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример с функцией:
Python:
from tkinter import *
from tkinter import filedialog as fd
from PIL import Image, ImageTk


root = Tk()
root.geometry('600x400')
c = Canvas(root, width=400, height=400)
c.grid(row=0, column=0)


def insertImage():
    global c
    image_name = fd.askopenfilename()
    original_image = Image.open(image_name)
    resize_img = original_image.resize((400, 400))
    img_tk = ImageTk.PhotoImage(resize_img)
    c.image = img_tk
    c.create_image(0, 0, image=img_tk, anchor="nw")

b1 = Button(text="Открыть", command=insertImage)
b1.grid(row=0, column=1)

root.mainloop()
 
  • Мне нравится
Реакции: xkrollz

xkrollz

Новичок
Пользователь
Май 18, 2020
2
0
1
Вот пример с функцией:
Python:
from tkinter import *
from tkinter import filedialog as fd
from PIL import Image, ImageTk


root = Tk()
root.geometry('600x400')
c = Canvas(root, width=400, height=400)
c.grid(row=0, column=0)


def insertImage():
    global c
    image_name = fd.askopenfilename()
    original_image = Image.open(image_name)
    resize_img = original_image.resize((400, 400))
    img_tk = ImageTk.PhotoImage(resize_img)
    c.image = img_tk
    c.create_image(0, 0, image=img_tk, anchor="nw")

b1 = Button(text="Открыть", command=insertImage)
b1.grid(row=0, column=1)

root.mainloop()
Благодарю за ответ. Я совсем забыл о локальных и глобальных переменных. Кстати, как я уже догадался, можно также использовать return
 

Форум IT Специалистов