在 tkinter 列表框中显示对象
Displaying objects in a tkinter Listbox
我了解到您可以将对象放入 tkinter 列表框中。
我想知道的是如何以有意义的名称在列表框中显示它们。目前我有一个 class 'Character',我在列表框中得到的只是 <Character.Character object at 0x002CF6D0>
。如果我取回它,我会把那个对象取回来,这就是我想要的。
但是列表框中的那个项目对用户不是很有用。有没有一种方法可以给它一个我选择的名称,同时仍然能够检索对象?
您不能将对象放入列表框中。列表框对 python 对象一无所知,只能显示字符串。如果你试图将一个对象插入到列表框中,tkinter 会将该对象转换为字符串,然后将字符串(且仅是字符串)存储在列表框中。您以后将无法检索到实际对象。
但是,如果您希望它自动将您的对象转换为具有您选择的名称的字符串,您可以覆盖 class 的 __str__
方法。该函数是 tkinter 在将对象插入小部件之前用来将对象转换为字符串的函数。
例如,这里有一个 class 定义,当对象被转换为字符串时 return name 属性:
class Character():
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
这是在 tkinter 程序中使用 class 的示例。
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()
我了解到您可以将对象放入 tkinter 列表框中。
我想知道的是如何以有意义的名称在列表框中显示它们。目前我有一个 class 'Character',我在列表框中得到的只是 <Character.Character object at 0x002CF6D0>
。如果我取回它,我会把那个对象取回来,这就是我想要的。
但是列表框中的那个项目对用户不是很有用。有没有一种方法可以给它一个我选择的名称,同时仍然能够检索对象?
您不能将对象放入列表框中。列表框对 python 对象一无所知,只能显示字符串。如果你试图将一个对象插入到列表框中,tkinter 会将该对象转换为字符串,然后将字符串(且仅是字符串)存储在列表框中。您以后将无法检索到实际对象。
但是,如果您希望它自动将您的对象转换为具有您选择的名称的字符串,您可以覆盖 class 的 __str__
方法。该函数是 tkinter 在将对象插入小部件之前用来将对象转换为字符串的函数。
例如,这里有一个 class 定义,当对象被转换为字符串时 return name 属性:
class Character():
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
这是在 tkinter 程序中使用 class 的示例。
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()