动态嵌入Tkinter中列表中的图像

时间:2018-01-29 19:35:31

标签: python python-3.x tkinter pillow

对于学校项目,我正在Tkinter设计一个应用程序。这将是一个考试问题浏览器,允许学生查看试卷。目前我正在尝试找到一种方法将列表中的图像动态嵌入到文本小部件中。以下代码是我目前用于查找解决方案的代码。

from tkinter import *
from PIL import Image, ImageTk

im = []
im.append("mary.jpg")
im.append("sherm.jpg")
im.append("bean.jpg")
class Window(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)

        self.master = master
        self.start_window()

    def start_window(self):
        self.master.title("question browser")
        self.pack(fill=BOTH, expand=1)

        D = Text(self)
        x = 0
        for i in (im):
            imgs = Image.open(im[x])
            mi = ImageTk.PhotoImage(imgs)
            D.image_create(END, image = mi)
            x = x + 1

        D.pack()
        D.config(state=DISABLED)

root = Tk()

app = Window(root)
root.mainloop()  

没有输出错误信息,只是一个空白框。我认为这是因为我没有保留对图像的引用。我正在努力寻找这个问题的解决方案,因为实际的程序将使用大量的图像。因此,无法创建全局变量来存储对每个单独图像的引用(例如:Global Variable = Image.open("image.jpg"))。 帮助将不胜感激。

如果需要,我可以安装其他模块。

1 个答案:

答案 0 :(得分:1)

现在可以使用以下代码,解决方案是创建一个...全局数组...(我想这就是所谓的)然后,在for i in (im)循环期间 - mi = ImagesTk.PhotoImage(imgs)之后 - 我将变量“mi”附加到全局列表中。

from tkinter import *
from PIL import Image, ImageTk

images = []

class Window(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)

        self.master = master
        self.start_window()

    def start_window(self):
        self.master.title("question browser")
        self.pack(fill=BOTH, expand=1)

        im = []
        im.append("mary.jpg")
        im.append("sherm.jpg")
        im.append("bean.jpg")
        D = Text(self)
        x = 0
        for i in (im):
            imgs = Image.open(im[x])
            mi = ImageTk.PhotoImage(imgs)
            images.append(mi)
            D.image_create(END, image = mi)
            x = x + 1
        D.pack()
        D.config(state=DISABLED)

root = Tk()

app = Window(root)
root.mainloop()