繁体   English   中英

Python中的Treeview Tkinter库中的图像

[英]Image in treeview Tkinter library in Python

我正在Python tkinter库中创建treeview。 我想在代表文件的每个节点旁边都有一个图像图标。 我已经创建了函数,但是我不知道为什么图像仅出现在最后一个节点中。

    def populate_tree(self, parent, fullpath, children):
    for child in children:
        cpath = os.path.join(fullpath, child).replace('\\', '/')

        if os.path.isdir(cpath):
            cid = self.tree.insert(parent, END, text=child,
                                   values=[cpath, 'directory'])
            self.tree.insert(cid, END, text='dummy')
        else:
            if (child != "Thumbs.db"):
                self.pic = ImageTk.PhotoImage(file=cpath)
                self.tree.insert(parent, END, text=child, image=self.pic,
                     values=[cpath, 'file','{} bajtów'.format(os.stat(cpath).st_size)])

在此处输入图片说明

如果下一个节点被扩展,则消失...

在此处输入图片说明

我认为这与不保存对图像的引用有关。 对于每个文件,您都会创建一个新图像: self.pic = ImageTk.PhotoImage(file=cpath) ,我想Python会创建一个新对象,并且代表先前图像的对象会被垃圾回收。

我举了一个例子,在其中我创建了功能范围之外的图像,然后在创建树视图项目时使用它们:

import tkinter as tk
import tkinter.ttk as ttk

root = tk.Tk()
tree = ttk.Treeview(root)
tree.pack()

# Create a list of thumbnail images associated with filenmes
thumbnails = ['thumb1.png','thumb2.png','thumb3.png']
images = []
for thumb in thumbnails:
    images.append(tk.PhotoImage(file=thumb))

def populate_tree():
    folder = tree.insert('', 'end', text='Folder')
    for i in range(3):
        filename = 'Image_' + str(i)
        tree.insert(folder, 'end', text=filename, image=images[i])

populate_tree()

在我的示例中,我使用缩略图列表使其变得简单。 如果您有许多文件,则可能要使用字典来关联缩略图和文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM