Python Tkinter Treeview 添加图像作为列值

2023-12-01

我试图将图像添加到树视图上每一行的第一列,但无论我做什么,最终总是显示对象“pyimage1”的名称而不是实际图像。正如这张图片所示

我正在使用的代码是这样的。

    from tkinter import PhotoImage.
    self._img = PhotoImage(file="resources\information_picto.gif")
    self.tree.insert('', 'end', values= self._image,self.name, self.status, self.cores, self.turn, self.added_time)

我尝试过使用 png,得到了相同的结果,我知道我的图像对象已正确创建,因为在调试时我可以看到图像的属性,但我无法使其显示在树视图行上。

Edit:

 def __init__(self, master, **kw):
    self.SortDir = True
    f = ttk.Frame(master)
    f.pack(fill=BOTH, expand=True)
    self.dataCols = ('Project Name', 'Status', 'Cores', 'Turn', 'Added date/time')
    self.tree = ttk.Treeview(columns=self.dataCols,
                             show='headings')
    self.tree.column("Project Name", anchor="center")

    self.tree.grid(in_=f, row=0, column=0, sticky=NSEW)
    f.rowconfigure(0, weight=1)
    f.columnconfigure(0, weight=1)
    style = ttk.Style(master)
    style.configure('Treeview', rowheight=38)

    self._img = PhotoImage(file="resources\information_picto.gif")  
    self.tree.insert('', 'end', text="#0's text", image=self._img,
                     value=("A's value", "B's value"))

我正在尝试使用上面的代码,它与您的非常相似,但我找不到我的错误,但是我看到“文本”或“图像”字段出现在该行上,只是我的值列表作为“价值”传递,有什么想法吗?


您可以使用以下方式显示您的图像image论据中的w.insert方法。见下文。

from tkinter import PhotoImage.
self._img = PhotoImage(file="resources\information_picto.gif")
self.tree.insert('', 'end', text='Information_picto.gif', open=True, image=self._img, 
                 value=(self.name, self.status, self.cores, self.turn, self.added_time))

Edit:

下面是一个示例脚本,显示了 ttk.Treeview 小部件的基本设置以及如何将图像包含到小部件的 #0 列和第一行(标题下方)。

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import tkinter as tk
import tkinter.ttk as ttk

class App(ttk.Frame):

    def __init__(self, parent=None, *args, **kwargs):
        ttk.Frame.__init__(self, parent)
        self.parent = parent

        # Create Treeview 
        self.tree = ttk.Treeview(self, column=('A','B'), selectmode='none', height=7)
        self.tree.grid(row=0, column=0, sticky='nsew')

        # Setup column heading
        self.tree.heading('#0', text=' Pic directory', anchor='center')
        self.tree.heading('#1', text=' A', anchor='center')
        self.tree.heading('#2', text=' B', anchor='center')
        # #0, #01, #02 denotes the 0, 1st, 2nd columns

        # Setup column
        self.tree.column('A', anchor='center', width=100)
        self.tree.column('B', anchor='center', width=100)

        # Insert image to #0 
        self._img = tk.PhotoImage(file="imagename.gif") #change to your file path
        self.tree.insert('', 'end', text="#0's text", image=self._img,
                         value=("A's value", "B's value"))


if __name__ == '__main__':
    root = tk.Tk()
    root.geometry('450x180+300+300')

    app = App(root)
    app.grid(row=0, column=0, sticky='nsew')

    root.rowconfigure(0, weight=1)
    root.columnconfigure(0, weight=1)

    root.mainloop()

Picture added.

回复您的编辑:请参阅脚本中的注释以获取解释。还建议您尝试我之前为您提供的脚本,以帮助您更好地了解如何使用 Treeview 小部件。玩得开心。

#!/usr/bin/python3
# -*- coding: utf-8 -*-


# tkinter modules
import tkinter as tk
import tkinter.ttk as ttk

class App(ttk.Frame):

     def __init__(self, master, **kw):
        self.SortDir = True
        #f = ttk.Frame(master) #1. this widget is self, no need to assign to f. 2. You missed out .__init__().
        ttk.Frame.__init__(self, master)
        #f.pack(fill=tk.BOTH, expand=True)# redundant. done by app.grid


        #self.dataCols = ('Project Name', 'Status', 'Cores', 'Turn', 'Added date/time')
        #I have removed 'Project Name' since it is #0. self.dataCols is for #01, #02, .. onwards
        self.dataCols = ('Status', 'Cores', 'Turn', 'Added date/time')
        #self.tree = ttk.Treeview(self, columns=self.dataCols, show='headings')
        # Did not define widget's parent? I have added. Picture not shown because u used option show='headings'
        self.tree = ttk.Treeview(self, columns=self.dataCols)
        #self.tree.column("Project Name", anchor="center")        
        #self.tree.grid(in_=f, row=0, column=0, sticky=tk.NSEW)
        # I have removed "in_=f" since parent has been defined.
        self.tree.grid(row=0, column=0, sticky=tk.NSEW)

        # Setup column heading
        self.tree.heading('#0', text='Project Name', anchor='center')
        self.tree.heading('#1', text='Status', anchor='center')
        self.tree.heading('#2', text='Cores', anchor='center')
        self.tree.heading('#3', text='Turn', anchor='center')
        self.tree.heading('#4', text='Added date/time', anchor='center')


        #f.rowconfigure(0, weight=1) # Use with .grid but not for .pack positioning method
        #f.columnconfigure(0, weight=1) # same as above
        style = ttk.Style(master)
        style.configure('Treeview', rowheight=38)

        self._img = tk.PhotoImage(file="test50.gif")  
        self.tree.insert('', 'end', text="#0's text", image=self._img,
                         value=("A's value", "B's value"))

if __name__ == '__main__':
    root = tk.Tk()
    root.geometry('450x180+300+300')

    app = App(root)
    app.grid(row=0, column=0, sticky='nsew')

    root.rowconfigure(0, weight=1)
    root.columnconfigure(0, weight=1)

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

Python Tkinter Treeview 添加图像作为列值 的相关文章

随机推荐

  • 鸭子类型和类方法(或者,如何使用类和实例中的方法?)

    我有一些代码 我想互换地传递实例或类 我在该代码中要做的就是调用一个我希望类和实例都具有的方法 该方法go 在下面的例子中 不幸的是 我无法创建与常规方法同名的类方法 请参见下面的示例 我最初预计第二次调用会产生一个a代替b 关于如何实现这
  • 使用 RestSharp 为 Etsy 的 API 调用 oauth/request_token 获取签名无效

    我正在尝试使用休息锐利访问 Etsy 的 API 这是我尝试获取 OAuth 访问令牌时使用的代码 var authenticator OAuth1Authenticator ForRequestToken ConfigurationMan
  • 高unicode码点如何表示为两个码点?

    I ve seen像 U 10000 这样 gt 2 字节的 unicode 代码点可以写成一对 就像 uD800 uDC00 他们似乎是从啃咬开始的d 但这就是我所注意到的 这种分裂动作叫什么 它是如何工作的 UTF 8的意思是 用我自己
  • 未为参数指定实参

    使用 VB net 和 WPF 我已经转换了可用的代码使用装饰器覆盖 WPF 中的控件从 C 到 VB Net 原始 C 代码
  • Java中如何按两个字段排序?

    我有对象数组person int age String name 如何按名称字母顺序排序此数组 然后按年龄排序 您会为此使用哪种算法 您可以使用Collections sort如下 private static void order Lis
  • 使用 GSON 解析嵌套 JSON 数据

    我正在尝试使用 Java 中的 gson 解析一些 JSON 数据 其结构如下 但通过查看在线示例 我找不到任何可以完成这项工作的东西 有人可以帮忙吗 data id stuff values 123 456 123
  • 在 Salesforce iOS SDK 中查询用户名

    我有一个使用最新 Salesforce iOS SDK 的 iOS 应用程序 它使用 Salesforce 站点上的 oAuth2 0 通过 Web 视图对用户进行身份验证 因此我不会在应用程序中捕获用户名 有没有办法可以使用 API 或会
  • Swift:如果计时器从函数启动,如何使计时器无效?

    我有一个timer函数中的变量如下所示 timer NSTimer func whatever timer NSTimer scheduledTimerWithTimeInterval 1 target self selector time
  • 清除应用程序数据不会清除 GCM 令牌或 GCM 订阅主题

    我已经订阅了 GCM 的主题 当我通过 Android 设置删除所有应用程序数据时 GCM 令牌是相同的 并且有关主题的 GCM 通知仍然可用 因此我收到了我不想收到的通知 我的问题是 如何获取 GCM 订阅的所有主题的列表 如何在不知道主
  • 使用 Javascript/Jquery 上下移动节点 Div

    我想知道 Javascript 中是否有一种方法可以在没有 id 的情况下上下移动节点 div 元素 当选择该项目并右键单击时 将出现 上移 和 下移 选项 现在在 上移 上单击它应该在 div 中上移 例如 div div 1 div d
  • std::vector 实现是否使用内部数组或链表或其他?

    有人告诉我 std vector 在内部实现上有一个 C 风格的数组 但这不会否定动态容器的全部目的吗 那么在向量中插入一个值是 O n 操作吗 还是像链表那样 O 1 来自 C 11 标准 在 序列容器 库部分 强调我的 23 3 6 1
  • 如何计算进程id的执行指令数,包括所有未来的子线程

    前段时间 我问了以下问题 如何统计进程id 包括子进程 的执行指令数 M Iduoad 提供了一个解决方案pgrep捕获所有子 PID 并将其与 perf stat 中的 p 一起使用 效果很好 然而 我遇到的一个问题是多线程应用程序以及当
  • 在 ASP.NET 中管理实体框架 ObjectContext

    我正在将实体框架用于 ASP NET Web 表单应用程序 我想知道应该如何处理ObjectContext这是一生 例如 我有一个InviteService管理邀请的类 例如创建和接受邀请 该类本身位于 Web 项目的另一个项目 命名空间中
  • 在 Fedora 容器中,systemctl 给出 Failed to get D-Bus connection

    当我在 Fedora 容器中使用 systemctl 时 我得到 无法获得 D Bus 连接 未知错误 1 有人知道如何解决这个问题吗 或者说systemctl不能在docker容器中使用吗 The systemctl命令与systemd通
  • 根据 Google 表格中单列中的重复项删除行

    我有与此类似的电子表格 我想根据第一列数据删除行的所有重复项 因此 在此屏幕截图行中 将保留第 1 行和第 2 行 并删除第 2 行 任何帮助将不胜感激 附 在我的例子中 列从 A 到 AU 行从 2 到 9500 谢谢 Maya s an
  • 如何在同一个循环中同时循环所有 Firebase 子项?

    我在 firebase 中有三个节点 我想使用相同的循环来循环它们 我成功地能够使用以下代码循环遍历单个节点 cookie databaseRef child cookies observeSingleEvent of value with
  • 从 Java 到 PHP 重新创建 PDF 文件

    我有一个 Java 中的 WebService 使用 Apache Axis 它获取文档的 id 并调用 JasperReports 来创建 PDF 文件 之前在 java 应用程序中创建的报告 服务器端 以创建我正在使用的方法的报告 Ja
  • 使用 Javascript 删除从不同页面呈现的整个表格

    我有一张像这样的桌子 table class toc border 1 table 在许多页面中 所有这些页面都呈现在单个页面中 当我应用 Javascript 来删除加载时使用的内容时 仅删除一张表 其他表不会被删除 我正在尝试使用 Ja
  • Azure AD登录后如何重定向到特定页面?

    我正在将 Azure AD 登录集成到我的应用程序中 我想在成功登录天蓝色广告后重定向到特定操作 我的 Startup Auth cs 文件中有以下代码 但它没有重定向到redirecturi 任何人都可以建议我如何在成功登录后重定向到自定
  • Python Tkinter Treeview 添加图像作为列值

    我试图将图像添加到树视图上每一行的第一列 但无论我做什么 最终总是显示对象 pyimage1 的名称而不是实际图像 正如这张图片所示 我正在使用的代码是这样的 from tkinter import PhotoImage self img