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根节点图标/图像不出现 的相关文章

  • Django 表单验证消息未显示

    我试图限制可以以表单上传的文件类型 大小和扩展名 该功能似乎有效 但未显示验证错误消息 我意识到if file size gt 4 1024 1024可能不是最好的方法 但我稍后会处理这个问题 这是 forms py class Produ
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 人体的宽度和高度

    如何识别图像中人体的高度和宽度 你需要一些参考点 除非您知道相机设置 位置 变焦 镜头畸变等 以及人相对于相机的位置 否则简单的照片是不够的 如果您确实有参考 例如背景中的网格或其他东西 那么您可以测量网格并从那里开始 听起来不像你需要的
  • Windows 中的信号处理

    在Windows中 我试图创建一个等待SIGINT信号的python进程 当它收到SIGINT时 我希望它只打印一条消息并等待SIGINT的另一次出现 所以我使用了信号处理程序 这是我的 signal receiver py 代码 impo
  • 默认可变参数的惯用方式

    在 python 中 如果直接将可变类型设置为默认参数 则会出现众所周知的边缘情况 def foo x return x y foo y append 1 print foo 通常的解决方法是将参数默认为None然后将其放入体内 然而 有
  • AttributeError:“NoneType”对象没有属性“astype”

    我在复现ESRGAN相关程序时遇到了如下问题 libpng 错误 读取错误 Traceback most recent call last File sda ZTL B codes train py line 173 in
  • WinForms TreeView - 如何手动“突出显示”节点(就像被单击一样)

    我需要知道如何让以编程方式选择的节点以图形方式处于 选定 状态 就像用户单击它一样 SelectedNode 仅使这一节点在内部被选中 非常感谢 它没有显示为突出显示的原因是由于树视图没有焦点 这是我的测试表单上的按钮单击事件 TreeVi
  • 多行 x 刻度标签

    我正在尝试制作类似于此 Excel 示例的图 我想知道 x 刻度标签上是否有第二层 例如 5 年统计摘要 我知道我可以使用制作多行刻度标签 n但我希望能够独立地转换这两个级别 这很接近 fig plt figure figsize 8 4
  • 导入错误:无法导入名称“IntEnum”

    我正在尝试安装upstox 这是一个用于连接市场数据的 Python API 我无法在Python3 5上安装它 我的配置是Python 3 5 3 v3 5 3 1880cb95a742 Jan 16 2017 15 51 26 MSC
  • 使用 matplotlib 从 TeX 创建数学表达式的图像

    使用 python 库 matplotlib 我发现了这个问题的解决方案 在 PyQt 中 很好地 显示代数表达式 https stackoverflow com questions 14097463 displaying nicely a
  • 模块“tensorflow”没有属性“random_uniform”

    我尝试执行一些深度学习应用程序 并收到模块 tensorflow 没有属性 random uniform 错误 在 CPU 上 代码运行良好 但速度非常慢 为了在 GPU 上运行代码 我需要更改一些定义 下面是我的代码 有任何想法吗 def
  • 在tensorflow .ckpt文件中使用预训练模型

    我有一个 ckpt 文件 我只想得到 cnn 的权重 我已经从 ckpt 检查点文件中进行了训练 inception resnet v2 2016 08 30 import tensorflow as tf saver tf train S
  • 如何得到将外力映射到广义力的矩阵?

    给定一个多体植物 我需要找到将外力 lambda 转换为广义力的矩阵 IE 以下方程中的 Phi 取自 Scott Kuindersma Frank Permenter 和 Russ Tedrake 的 稳定动态运动的有效可解二次规划 我的
  • Python 3 - 编码/解码与字节/Str [重复]

    这个问题在这里已经有答案了 我是 python3 的新手 来自 python2 我对 unicode 基础知识有点困惑 我读过一些很好的帖子 这让一切变得更加清晰 但是我看到 python 3 上有两种方法可以处理编码和解码 但我不确定使用
  • 未知的 PCM 卡.pcm.rear (pyaudio)

    问题与此相关pydub 问题 https github com jiaaro pydub issues 110 issuecomment 124205306 他们告诉我错误消息与 pyaudio 有关 usr bin env python3
  • 使用 TCPDF PHP 库横向显示的图像

    我正在使用 TCPDF PHP 库生成包含照片的 PDF 文档 由于某种原因 某些照片在我的计算机和网络上正确显示 但当我将该图像放入 PDF 中时 它似乎是横向的 这只发生在某些图像上 大多数图像显示正确 下面是在 PDF 中横向显示的示
  • 在 Android 版 Glide 中离线时加载已获取的图像

    我正在使用 Glide 版本 4 8 0 为了加载图像我这样做 GlideApp with HomePageFragment this load remoteURL diskCacheStrategy DiskCacheStrategy A
  • bool() 和operator.truth() 有什么区别?

    bool https docs python org 3 library functions html bool and operator truth https docs python org 3 library operator htm
  • Python子类方法从超类方法继承装饰器

    我有一个具有retrieve 方法的超类 并且它的子类每个都实现自己的retrieve 方法 我希望每个retrieve 方法都被装饰为在收到相同参数时缓存返回值 而不必在每个子类中装饰该方法 装饰器似乎不能被继承 我可能可以调用超类的方法
  • 使用 SSL 的 Xamarin.Forms Image.Source

    我正在使用一个在线商店来存储通过我们的应用程序上传的用户图像 并受 SSL 保护 上传工作一切顺利 因为我使用的是带有附加证书的 WebClient 但是当我尝试使用 Xamarin Forms Image 组件时 例如将源设置为 http

随机推荐

  • 如何使用 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