tkinter.ttk.Treeview根节点图标/图像不出现

2024-04-14

Problem:我无法让图标图像出现在 tkinter.ttk.Treeview 中根节点旁边。下面是我使用的测试代码。它执行时没有错误,但图像没有出现在根节点的左侧。我尝试过使用图像文件的完整路径名,但这不起作用。另外,我尝试使用 PIL.ImageTk.PhotoImage 打开图像文件,但这也不起作用。相反,出现了如下所示的错误。

问题:如何让图标图像出现在 tkinter.ttk.Treeview 根节点(或任何节点)的左侧?

测试代码:

import os
import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image, ImageTk

class App(ttk.Frame):

    def __init__(self, master, path):
    ttk.Frame.__init__(self, master)
    self.tree = ttk.Treeview(self)
    ysb = ttk.Scrollbar(self, orient='vertical', command=self.tree.yview)
    xsb = ttk.Scrollbar(self, orient='horizontal', command=self.tree.xview)
    self.tree.configure(yscroll=ysb.set, xscroll=xsb.set)
    self.tree.heading('#0', text='Directory', anchor='w')

    abspath = os.path.abspath(path)
    i = './icon/Home-icon_16.gif'
    root_pic = tk.PhotoImage(file=i)
    #root_pic = ImageTk.PhotoImage(i)
    root_node = self.tree.insert('', 'end', text=abspath, open=True, image=root_pic)
    l1_node = self.tree.insert(root_node, 'end', text='level 1', open=True)
    l2_node = self.tree.insert(l1_node, 'end', text='level 2', open=True)
    l3_node = self.tree.insert(l2_node, 'end', text='level 3', open=True)
    l2a_node = self.tree.insert(l1_node, 'end', text='level 2a', open=True)
    l3a_node = self.tree.insert(l2a_node, 'end', text='level 3a', open=True)

    self.tree.grid(row=0, column=0)
    ysb.grid(row=0, column=1, sticky='ns')
    xsb.grid(row=1, column=0, sticky='ew')
    self.grid()

root = tk.Tk()
path_to_my_project = os.getcwd()
app = App(root, path=path_to_my_project)
app.mainloop()

使用 PIL.ImageTk.PhotoImage 时出现错误消息:

root_pic = ImageTk.PhotoImage(i)
  File "/usr/lib/python3/dist-packages/PIL/ImageTk.py", line 108, in __init__
    mode = Image.getmodebase(mode)
  File "/usr/lib/python3/dist-packages/PIL/Image.py", line 296, in getmodebase
    return ImageMode.getmode(mode).basemode
  File "/usr/lib/python3/dist-packages/PIL/ImageMode.py", line 52, in getmode
    return _modes[mode]
KeyError: './icon/Home-icon_16.gif'

Home-icon_16.gif: Home-icon_16.gif

应用:python3.5 ver3.5.1-10; python3-tk ver3.5.1-1; tk8.6 ver8.6.5-1; python3-pil.imagetk:amd64 ver3.1.2-0ubuntu1


首先尝试创建 PIL 图像Image.open('file_path')然后做Photoimage。另外,您需要保留对 PhotoImage 的引用,否则它不会在 tkinter 中显示。

import os
import tkinter as tk
import tkinter.ttk as ttk
from PIL import Image, ImageTk

class App(ttk.Frame):

    def __init__(self, master, path):
        ttk.Frame.__init__(self, master)
        self.tree = ttk.Treeview(self)
        ysb = ttk.Scrollbar(self, orient='vertical', command=self.tree.yview)
        xsb = ttk.Scrollbar(self, orient='horizontal', command=self.tree.xview)
        self.tree.configure(yscroll=ysb.set, xscroll=xsb.set)
        self.tree.heading('#0', text='Directory', anchor='w')

        abspath = os.path.abspath(path)
        i = './icon/Home-icon_16.gif'
        root_pic1 = Image.open(i)                           # Open the image like this first
        self.root_pic2 = ImageTk.PhotoImage(root_pic1)      # Then with PhotoImage. NOTE: self.root_pic2 =     and not     root_pic2 =

        root_node = self.tree.insert('', 'end', text=abspath, open=True, image=self.root_pic2)
        l1_node = self.tree.insert(root_node, 'end', text='level 1', open=True)
        l2_node = self.tree.insert(l1_node, 'end', text='level 2', open=True)
        l3_node = self.tree.insert(l2_node, 'end', text='level 3', open=True)
        l2a_node = self.tree.insert(l1_node, 'end', text='level 2a', open=True)
        l3a_node = self.tree.insert(l2a_node, 'end', text='level 3a', open=True)

        self.tree.grid(row=0, column=0)
        ysb.grid(row=0, column=1, sticky='ns')
        xsb.grid(row=1, column=0, sticky='ew')
        self.grid()

root = tk.Tk()
path_to_my_project = os.getcwd()
app = App(root, path=path_to_my_project)
app.mainloop()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tkinter.ttk.Treeview根节点图标/图像不出现 的相关文章

  • 如何在运行时添加到 TreeView 目录

    我有一个TreeView我想允许用户添加和删除子项目 在探索基本功能时 我使用button and a textbox添加此子项 当用户点击button a new TreeViewItem需要创建并设置为我的父项的子项TreeView与t
  • 通过 htaccess 将 PNG 解析为 PHP 仅适用于本地服务器,但不适用于网络服务器

    我用 PHP 创建了一个动态 PNG 图片 为了使用 PNG 扩展名 我创建了一个包含以下内容的 htaccess 文件 AddType application x httpd php png 在我的本地 XAMPP 服务器上 一切工作正常
  • sklearn ShuffleSplit 出现“__init__() 获得参数 'n_splits' 的多个值”错误

    我正进入 状态 init 获得参数 n splits 的多个值 该行的错误 cv ShuffleSplit n splits 10 test size 0 2 random state 0 在下面的代码中 import matplotlib
  • 在PHP中根据日期显示图像

    在我的计算机上的某个位置 我有一个 PHP 脚本 用于根据日期显示图像 这将允许我在特定日期或选定日期之间显示不同的图像 并在当前日期未列出时显示默认日期要显示的特定图像 我最近的一个硬盘驱动器出现了问题 丢失了一堆文件 我担心这个脚本就是
  • 字典键中的通配符

    假设我有一本字典 rank dict V 1 A 2 V 3 A 4 正如您所看到的 我在一个 V 的末尾添加了一个 虽然 3 可能只是 V 的值 但我想要 V1 V2 V2234432 等的另一个密钥 我想检查它 checker V30
  • 如何将两个图像放置在一个div的对角

    如你所见 我不是 CSS 专家 我需要一些帮助来了解如何使用两个图像制作这个 div 如下图所示 托马斯是对的 但还有更好的解决方案 div img class align left src alt description of your
  • 删除 WebView Android 中不需要的空白

    我已经开始使用 WebView 开发应用程序 实际上我正在使用 Webview 加载图像 我喜欢使用该类的内置缩放控件 我可以成功加载图像 但我可以看到一些令人恼火的空白 我找不到删除它的方法 我的图像尺寸为 750 1000 我在下面附上
  • 占据花车的地板

    我发现了两种在 Python 中占据发言权的方法 3 1415 1 and import math math floor 3 1415 第一种方法的问题是它返回一个浮点数 即3 0 第二种方法感觉很笨拙而且太长 在 Python 中是否有替
  • 找到不固定长度的数字的所有可能排列以达到给定的总和或乘积

    使用普通 Python 或任何 Python 库 您将如何查找列表中元素的所有可能组合l等于给定值val using addition 减法 or 乘法 假设列表的长度并不总是相同 假设列表中的每个元素在每个组合中只能使用一次 并假设没有使
  • 导入错误:无法导入名称“FFProbe”

    我无法获取ffprobe包 https github com simonh10 ffprobe在 Python 3 6 中工作 我使用 pip 安装它 但是当我输入import ffprobe it says Traceback most
  • 如何将图像放入此 UIPickerView 中?

    我不知道如何创建一个在文本一侧带有图像的自定义 UIPickerView 我一直在寻找一种方法 我刚刚发现了这个 UIView pickerView UIPickerView pickerView viewForRow NSInteger
  • 将二进制图像划分为像素数据“块”

    我使用 Python 和 PIL 作为在二进制图像中嵌入数据的工作的一部分 并且需要分析像素组以确定要操作的适当像素 以便嵌入数据 图像需要被分割成相等的像素数据 块 以供分析 但我正在努力想出一种适当的方法来做到这一点 我尝试过使用 Py
  • 如何通过 BufferedImage 将巨大的图像加载到 Java 中?

    我想将大图像 18000 x 18000 加载到我的应用程序中 如果我使用BufferedImage与类型int rgb 我需要大约 1235mb 的堆内存来加载 这是一个非常大的内存量 最终用户可能拥有更少的内存 1GB 或更少 在我的开
  • 加载pickle时出错

    无法加载 pickle 文件 我正在使用 python 3 5 import pickle data pickle load open D ud120 projects final project final project dataset
  • 当在Python中使用负数对字符串进行切片时,0被禁用?

    假设我有一个字符串 gt gt gt a akwkwas gt gt gt gt gt gt a 3 was gt gt gt a 3 None was gt gt gt a 3 0 为什么我不能使用0作为切片的末尾 这是来自文档 记住切片
  • 在html表格的每一行添加点击功能

    我最近创建了一个函数 它根据用户在网站中的输入进行一些复杂的名称匹配 并将结果作为表格格式的 html 文件返回 我的问题是如何在每一行添加点击功能 df get cust info returns a pandas dataframe d
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 动态img(或视频)标签根本不加载资源,HTTP请求处于“待处理”状态

    我尝试使用以下方法在 Web 应用程序上加载资源时遇到一些问题img or videoHTML 标签 我在我的应用程序中使用 Angular 并动态设置src的参数img标签 使用ng src src 指示 没有那么多图像和资源需要加载 在
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • 如何使用 Django 发布和检索 blob

    我有一个blob 这是我使用调整大小的图像
  • 如何在 R 中并排显示列表 - 列表的“cbind”?

    我希望利用我的屏幕空间并排查看几个简单的列表 我并不是想把它们结合起来 a lacbind 但我不介意是否创建一个新的中间结构 当然 要意识到一个列表可能有许多不同类型的对象 尽管我几乎保证我的列表具有相同的结构 如果有必要让事情正常工作
  • 有已知网络爬虫的列表吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试获取网络服务器上某些文件的准确下载数量 我查看了用户代理 其中一些显然是机器人或网络爬虫 但
  • 我真的需要 malloc 吗?

    据我了解 malloc是用来动态分配内存的 在我的代码中 我有时会调用以下函数 int memory get log unsigned char day unsigned char date unsigned char month char
  • App Store:仅针对 iPhone/iPod 推出,不适用于 iPad

    如何在 App Store 上启动仅适用于 iPhone iPod 而不是 iPad 的应用程序 我似乎在 plist 文件和 iTunesConnect 中都找不到任何设置 谢谢 你不能 Apple 的应用程序商店指南似乎明确不允许 iP
  • css位置固定根本不起作用

    我正在寻找一个页脚类型的东西布莱克霍利网站 http www blakehawley com它有一些不同的链接等 它应该是横幅样式 我的意思是它应该停留在底部并被修复 div 是 菜单 这是我的 HTML
  • 当 merge.ff = only 时如何挤压合并?

    首先 我有我的merge ff设置为only as in git config global merge ff only 我这样做是因为我不希望 git 在没有先与我检查的情况下进行非快进合并 这是一个很好的保障 确保我有机会做一些除了创建
  • ServiceStack AppHost 是单例吗?

    我一直在评估 ServiceStack 到目前为止 我已经被说服了 但我有一个要求 think将会破坏交易 我基本上需要多个 AppHost 派生的实例 第一个运行良好 但其余的则失败 因为 AppHostBase Instance 已被设
  • 执行 tail -F 直到匹配模式

    我想做一个tail F在文件上直到匹配模式 我找到了一种使用方法awk 但恕我直言 我的命令并不是很干净 问题是我need由于某些限制 只能用一行来完成 tail n 0 F tmp foo awk W interactive if 1 E
  • 使用支持库 v21 设置 SearchView Widget 的样式

    我正在尝试使用新的 AppCompat v21 设计 SearchView 小部件的样式 但我遇到了一些问题 无论我在 suggestionRowLayout 属性上设置什么布局 它都不会执行任何操作 SearchView 的建议下拉列表保
  • R中5个排名的频率统计

    假设我有 5 件商品A B C D E并让受访者对它们进行排名 数据看起来像这样 gt df rank1 rank2 rank3 rank4 rank5 1 A B C D E 2 A C B D E 3 C A B E D 4 B A C
  • 如何避免 jasmine 在不同环境下出现较长的相对路径(../../../)?

    我目前正在开发一个项目 我想在不同的环境中进行测试 包括 node js 和带有 karma selenium 的不同浏览器 以避免兼容性问题 我想我会在浏览器中使用browserify 但我还不熟悉它 我有一个嵌套的测试目录 如下所示 r
  • verilog 中的案例陈述

    我遇到了优先级编码器设计 并找到了一种使用 case 语句来实现它的新方法 唯一令人困惑的是 case语句是否优先考虑case 例子 case 1 b1 A 3 Y lt 4 b1000 A 2 Y lt 4 b0100 A 1 Y lt
  • toDataURL 不是函数

    我正在尝试为画布生成一个网址 以下是我遵循的步骤 var can document getElementsByTagName canvas var src can toDataURL image png 当我尝试在 firebug 上运行上
  • 导航架构:如何在不使用clearTask的情况下管理正确的导航,因为它已被弃用

    当使用导航架构时here https issuetracker google com issues 116831650 here https issuetracker google com issues 80338878不推荐使用clear
  • 蓝牙文件发送

    我是蓝牙开发的新手 我发现了 32netfeet 现在我可以搜索附近的蓝牙设备并连接到它们 但如何发送文件 例如 SendTest txt 我尝试使用 OBEX 的 buttonclick 事件 但我不明白这是我的示例代码 using In
  • powershell 中的 DLLImport 用于使用相对路径访问 C 风格 32 位 API

    我想用powershell中的相对路径导入dll 下面是我尝试导入 dll 的代码片段 dirpath split path MyInvocation MyCommand Definition testDllPath dirpath Tes
  • SQL Server Management Studio (SSMS):最近的文件 (MRU) 菜单过于缩写而无法使用

    我在查找要编辑的正确 SQL 文件时遇到问题最近的文件 有时称为 MRU 最新版本的 SSMS 中的列表 我使用的是 18 5 我的文件具有相似的名称或相同的名称 但位于不同的文件夹中 这在 SSMS 的早期版本 我认为是 18 之前的版本
  • JavaScript 正则表达式匹配平衡结构而不关心不平衡结构

    我正在开发一个基于 JavaScript 的项目 该项目涉及一个基本的 Bash 启发的脚本系统 并且我正在使用正则表达式将行分隔成 多种类型的 标记 一种这样的令牌类当然是递归的 构造 该结构可以任意嵌套 我正在尝试设计一个 JavaSc
  • tkinter.ttk.Treeview根节点图标/图像不出现

    Problem 我无法让图标图像出现在 tkinter ttk Treeview 中根节点旁边 下面是我使用的测试代码 它执行时没有错误 但图像没有出现在根节点的左侧 我尝试过使用图像文件的完整路径名 但这不起作用 另外 我尝试使用 PIL