Ваша функция image () используется для вывода вашего изображения, и для этого вы присваиваете ее переменной «art». Объект изображения создается, но когда ваша функция завершается, поскольку вы ничего не возвращаете, этот объект перестает существовать:
y = 5
def getx():
x = 3
getx()
a = y + x
Этот код не будет работать, потому что x является локальным для функции getx (). Поскольку я ничего не делаю с этим, когда функция завершается, переменная тоже. Что я могу сделать, так это передать данные из функции, например:
y = 5
def getx():
x = 3
return x
x = getx()
a = y + x
В вашем коде tkinter необходимо, чтобы объект изображения существовал при его запуске, но пока вы создали его в своем функция, вы позволяете функции завершиться, ничего не делая с ней. Присвоение имени art глобальной переменной эффективно позволяет вашей функции возвращать ваш объект переменной вне функции. Другой способ сделать это:
root = Tk()
def image():
path="c:/Google Drive/Art Images/0030#Van Tromp, going about Masters.jpg"
image=Image.open(path)
art = ImageTk.PhotoImage(image)
label.grid()
label.configure(image=art)
return art
label=Label(root,bg="grey")
art = image()
root.mainloop()