无法在python程序中显示图像

时间:2018-07-04 18:00:14

标签: python opencv tkinter python-imaging-library

我最近开始编码,并决定从python开始。我想制作一个程序,该程序从文件打开对话框中加载图像,然后在我的root()中显示该图像。那行得通,但是当我将加载部件放到函数中时,它会显示应该放置图像的空间,但是没有图像。我的代码是:

from tkinter import *
from tkinter import filedialog
from shutil import copyfile
from PIL import ImageTk, Image
import numpy as np
import cv2

root = Tk()
#root.withdraw()
topFrame = Frame(root)
topFrame.pack()
bottomFrame = Frame(root)
bottomFrame.pack(side=BOTTOM)

def odaberiSliku():
    root.filename =  filedialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("jpeg files","*.jpg"),("all files","*.*")))
    img = (root.filename)
    copyfile(img,"test.jpg")
    #root.deiconify()
    photo = ImageTk.PhotoImage(Image.open("test.jpg"))
    label = Label(bottomFrame, image=photo)
    label.pack()
    return

button_load = Button(topFrame, text="Odaberi sliku", command=odaberiSliku)
button_load.pack()

root.mainloop()

我得到一个这样的窗口:

My window

谢谢。

1 个答案:

答案 0 :(得分:0)

由于photo是函数中的局部变量,因此与它关联的任何对象(在您的情况下为图像)在返回时都会被销毁。换句话说,函数返回后,没有更多图像可显示。解决方案:将变量设为全局变量。

def odaberiSliku():
    global photo
    # Your code follows