【问题标题】:Displaying objects in a tkinter Listbox在 tkinter 列表框中显示对象
【发布时间】:2019-11-09 14:47:08
【问题描述】:

我了解到您可以将对象放入 tkinter 列表框。

我想知道的是如何在 Listbox 中以有意义的名称显示它们。目前我有一个类'Character',我在列表框中得到的只是<Character.Character object at 0x002CF6D0>。如果我检索它,我就会把那个对象拿回来,这就是我想要的。

但是列表框中的那个项目对用户来说不是很有用。有没有办法可以给它一个我选择的名称,同时仍然能够检索对象?

【问题讨论】:

    标签: python-3.x tkinter listbox


    【解决方案1】:

    您不能将对象放入列表框中。列表框对 python 对象一无所知,只能显示字符串。如果您尝试将对象插入列表框中,tkinter 会将该对象转换为字符串,然后将字符串(并且仅字符串)存储在列表框中。稍后您将无法检索实际对象。

    但是,如果您希望它自动将您的对象转换为具有您选择的名称的字符串,您可以覆盖您的类的 __str__ 方法。该函数是 tkinter 用来在将对象插入到小部件之前将其转换为字符串的函数。

    例如,下面是一个类定义,当对象转换为字符串时将返回 name 属性:

    class Character():
        def __init__(self, name):
            self.name = name
        def __str__(self):
            return self.name
    

    这是在 tkinter 程序中使用该类的示例。

    import tkinter as tk
    
    root = tk.Tk()
    listbox = tk.Listbox(root)
    listbox.pack(fill="both", expand=True, padx=2, pady=2)
    
    c1 = Character("Inigo Montoya")
    c2 = Character("Fezzik")
    
    listbox.insert("end", c1)
    listbox.insert("end", c2)
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      • 2011-07-14
      • 2020-11-03
      • 2013-12-29
      相关资源
      最近更新 更多