我正在尝试在tkinter树视图中显示一个图像。我一直在阅读可能的解决方案,但似乎都不起作用,我一直得到一个只有列标题的空树。对于我一直在阅读的内容,我必须保留对PhotoImage的引用,但无论我如何尝试,它都不会发生。下面是一个简单的代码示例:
```import tkinter as tk
from tkinter import ttk
from PIL import ImageTk as itk
import PIL.Image
import io
s= tk.Tk()
s.title('No *£/**@#* image showing')
s.geometry('400x400')
s.rowconfigure(1, weight = 1)
s.columnconfigure(1,weight=1)
headings=['Image']
p = '032f8072.gif'
img1 = PIL.Image.open('032f8072.gif')
#img1 = img1.resize((10,10))
img = itk.PhotoImage(img1)
tree = ttk.Treeview(s)
tree.grid(column=1,row=1,sticky='NSEW')
tree['columns']=headings
tree['show']='headings'
for i in headings:
tree.heading(i,text=i)
tree.column(0, width=125,stretch=True)
#tree.column(1, width=125,stretch=True)
tree.insert('','end','0', open =True, image= img)
tree.image = img
s.mainloop()```
我试过使用. gif和. png,我试过一起或单独使用PIL. Image和Imagetk. PhotoImage,我也试过将img保存在一个列表中,以便从列表中调用,以避免丢失引用。
我真的需要得到这一小段代码的权利,我真的很沮丧,这一小段阻碍我。我真的很感激,如果有人能帮助我。
亲切问候
3条答案
按热度按时间js4nwp541#
这花了一段时间才弄清楚!我最终找到了10个月前一个类似问题的答案(不是正式的答案,但可以在问题下的评论中查看):Treeview Image not displaying
用户说这个注解解决了他们的问题,所以我试着将它应用到您的示例中。注解行的意思是
tree['show'] = 'headings'
强制Treeview只显示标题,而不显示树的主体。要解决这个问题,请将该行替换为以下内容:tree['show'] = ('headings', 'tree')
来显示整棵树,图像应该开始显示。
ia2d9nvy2#
您可以使用tree['columns']创建列,但是正如ne0n p1atypus所说,您不能使用tree['show']显示它们。您仍然可以使用explorer_tree手动输入列的名称。(“#0”,text=“Image”,锚= 'center')注意,“#0”指的是将显示图像的列。我没有尝试使用for循环输入列名。另外,当试图使用for循环构造一个树形视图来显示不同行中的图像时,这个算法必须在定义树形视图的函数中,并且所有的PhotoImage对象必须被附加到一个列表中以保持其引用,否则它们将被作为垃圾收集。我将在下面留下一个示例。
htrmnn0y3#
试试这个,对我来说管用。
粗体表示重要更改。
树= ttk.树视图(主视图=画布,列=汽车标题,显示=“树标题”,高度=11)
img = tk.照片图像(文件=r“帧/图像/图像. gif”)
插入(父项="",索引=“结束”,图像=img,文本=“信息”,值=集合树[i],标签=(“奇数行”))
标记标签图像= img