图像无法在功能内显示

时间:2017-06-04 06:09:54

标签: python-3.x tkinter

我有一个简单的GUI试用版,我希望在屏幕上显示少量图像。我首先设置窗口,灰色方块,并调整所需的图像大小,现在我想把它放在框架上:

img = [img_resize(yellow_square, img_size), "text"]

base_panel = Label(root, image = img[0])
base_txt   = Label(root, text =  img[1])
base_panel.grid(row = x, column = y)
base_txt.grid  (row = x, column = y)
...
for im in ls:
    panel = Label(root, image = im[0])
    panel.grid(row = x+im[1][1], column = y+im[1][2])    

    txt = Label(root, text =  im[2])
    txt.grid(row = x+im[1][1], column = y+im[1][2], sticky = 'S')

ls是一个列表 [image(使用Image.open(img)),位置偏移,文字]

当我将这些行复制到我的主脚本时,一切顺利,我得到了所需的images

但是当尝试从函数执行此操作时,我只能使文本部分工作

我想我的image = ...出了点问题,但我不明白是什么,因为我把这些行复制到main后我的代码正常工作。主要有另一个图像,所以这可能会以某种方式影响吗?

这是来自main的代码:

for im in background: # background is a list of gray squares
# some manipulation an a,b

panel = Label(root, image = im)
panel.grid(row = a, column = b)

这里应该是函数调用或行本身

1 个答案:

答案 0 :(得分:1)

这是一个常见问题。你必须保持对图像的引用,否则python会从内存中删除它。如果您不在函数中,则变量是一个全局变量,它保留引用。但是在一个函数中你需要做这样的事情:

panel = Label(root)
panel.img = im[0]
panel.config(image = panel.img)