如何将图片作为值添加到Tkinter树视图?

2024-10-17 12:34:20 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将图片添加到ttkTreeview?示例代码:

from tkinter import *
from ttk import *
from tkinter import ttk
import json
from PIL import Image, ImageTk
okno = Tk()

def maketable():
    style = ttk.Style(okno)
    style.configure("TVS.Treeview", rowheight=40)
    tv = Treeview(okno, style="TVS.Treeview")

    tv['columns'] = ('LName', 'Pic')
    tv.heading("#0", text='Jméno', anchor='w')
    tv.column("#0", anchor="w", width=200)

    tv.heading('LName', text='Příjmení')
    tv.column('LName', anchor='center', width=200)

    tv.heading('Pic', text='Obrazek')
    tv.column('Pic', anchor='center', width=200)

    dbf = open("xxx.json", 'r')
    db = json.loads(dbf.read())
for i in range(0, len(db)):
    root_pic1 = Image.open(db[i]["Pic"])
    root_pic2 = ImageTk.PhotoImage(root_pic1) 
    tv.insert('', 'end', image=root_pic2, text=db[i]['Name'], values=(db[i]['LName'])) 


tv.pack()


def main():
    okno.mainloop()

if __name__ == '__main__':
    maketable()
    main()

我希望“Pic”列有图片-这意味着图片不应该在#0中,因为它是一个值。在db[i]["Pic"]中有一个文件路径。在values=()中,我不能添加图像,它没有显示任何内容。在

编辑:感谢您的解决方案,但不适用于多个图像:

^{pr2}$

Tags: textfromimportjsondbstyle图片root
1条回答
网友
1楼 · 发布于 2024-10-17 12:34:20

就像@Nae和@furas指出的那样,当函数完成并且图像被垃圾回收时,局部变量会被移除。在

你需要做一些类似的事情:

tv._image = Image.open('test.png')
tv._image = ImageTk.PhotoImage(tv._image)

for i in range(0, len(db)):

    tv.insert('', 'end', image=tv._image, text=db[i]['Name'], values=(db[i]['LName']))

或者在函数之外定义它们。如果您使用的是类,并且可以调用self.root_pic = ...,这将是理想的

编辑:对于更多图像,您需要创建一个列表:

^{pr2}$

相关问题 更多 >