[英]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.