Отображение объектов в окне списка tkinter - PullRequest
0 голосов
/ 09 ноября 2019

Я узнал, что вы можете помещать объекты в список tkinter.

Что я хочу знать, так это как их отображать в списке со значимым именем. На данный момент у меня есть класс «Персонаж», и все, что я получаю в списке, это <Character.Character object at 0x002CF6D0>. Если я его получу, я получу этот объект обратно, чего я и хочу.

Но этот элемент в списке не очень полезен для пользователя. Есть ли способ, которым я могу дать ему имя по своему выбору, в то же время имея возможность извлекать объект?

1 Ответ

1 голос
/ 09 ноября 2019

Вы не можете помещать объекты в список. Окно списка ничего не знает об объектах Python и может отображать только строки. Если вы попытаетесь вставить объект в список, tkinter преобразует этот объект в строку, а затем сохранит строку (и только строку) в списке. Позже вы не сможете получить реальный объект.

Однако, если вы хотите, чтобы он автоматически преобразовывал ваш объект в строку с именем по вашему выбору, вы можете переопределить метод __str__ вашего класса. ,Именно эту функцию tkinter использует для преобразования объекта в строку перед вставкой его в виджет.

Например, вот определение класса, которое будет возвращать атрибут имени при преобразовании объекта в строку:

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()

screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...