改变树视图列表的ID

2024-09-27 00:11:13 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我的问题是,我试图将一个对象列表链接到一个treeview列表,这样当用户单击树中的一行时,他就可以得到关于这个对象的所有信息。你知道吗

下面是生成对象的代码:

class CHARACTER:
    def __init__(self, name, surname, age, sexe, pragmatism,
        courage, intelligence, shyness, happiness, fear, hunger,
        comfort, feeling, companion, father, mother, kids,
        brothers_sisters, friends, compatibility):
        self.name = name
        self.surname = surname
        self.age = age
        self.sexe = sexe
        self.pragmatism = pragmatism
        self.courage = courage
        self.intelligence = intelligence
        self.shyness = shyness
        self.happiness = happiness
        self.fear = fear
        self.hunger = hunger
        self.comfort = comfort
        self.feeling = feeling
        self.companion = companion
        self.father = father
        self.mother = mother
        self.kids = kids
        self.brothers_sisters = brothers_sisters
        self.friends = friends
        self.compatibility = compatibility

characters = []
sexe = ["Male", "Female"]
potential_husbands = []
potential_wives = []
potential_kids = []

mname = ["John", "Mike", "Albert", "Henry", "Patrick", "Francis",
"Robert", "Simon", "Charles", "Charlie", "Connor", "Adam", "Blake", 
"Steven", "Edward", "Andrew", "Joe", "Gregory", "Brian", "Anthony", 
"Frank", "Billy", "Boris", "Edgar", "Elliott", "Erik", "Liam", "Kyron", 
"Ned", "Neil", "Ricky", "Ross", "Rich", "Roy", "Preston", "William", 
"Vladimir", "Zach", "Wyatt", "Tylor", "Thomas", "Spike"]

fname = ["Alessia", "Ally", "Bridgette", "Callie", "Jessica", 
"Debora", "Diana", "Elizabeth", "Clair", "Fran", "Hannah", 
"Helene", "Marie", "Laura", "Leslie", "Leyla", "Kiley", 
"Margaret", "Lola", "Maryjane", "Megan", "Rose", "Sofia", 
"Samantha", "Teresa", "Yolanda", "Teri", "Vicky", "Tricia", 
"Rose", "Rita", "Nita", "Paola", "Penelope", "Polly", 
"Nathalie", "Melody", "Morgane"]

lname = ["Smith", "Johnson", "Williams", "Jones", "Brown", "Miller", 
"Moore", "Taylor", "Thomas", "White", "Harris", "Thompson", "Garcia", 
"Allen", "Lewis", "Hall", "Young", "Clark", "Hill", "Lopez", "Carter", 
"Turner", "Collins", "Evans", "Campbell", "Nelson", "Parker", "Green", 
"Black", "Green", "Lee", "Martin"]


"""
Generates 20 random characters with stats
"""

def characters_creation():
    for i in range(20):
        character = CHARACTER(random.choice(lname),
        random.choice(mname), random.randint(1,50), 
        random.choice(sexe), random.randint(1,20), random.randint(1,20),
        random.randint(1,20), random.randint(1,20),
        random.randint(1,20), random.randint(1,20),
        random.randint(1,20), random.randint(1,20), {}, [], [], [],
        [], [], [], {})

        characters.append(character)

我的树视图的代码是:

class CTABLE:
    def __init__(self, master):

        self.charactersTable = ttk.Treeview(master, selectmode="browse")
        self.charactersTable["show"] = "headings"
        self.charactersTable["columns"]=("Name", "Surname", "Hunger",
            "Fear", "Comfort", "Hapiness")
        self.charactersTable.column("Name", width=100, anchor=E)
        self.charactersTable.heading("Name", text="Name")
        self.charactersTable.column("Surname", width=100, anchor=E)
        self.charactersTable.heading("Surname", text="Surname")
        self.charactersTable.column("Hunger", width=100, anchor=E)
        self.charactersTable.heading("Hunger", text="Hunger")
        self.charactersTable.column("Fear", width=100, anchor=E)
        self.charactersTable.heading("Fear", text="Fear")
        self.charactersTable.column("Comfort", width=100, anchor=E)
        self.charactersTable.heading("Comfort", text="Comfort")
        self.charactersTable.column("Hapiness", width=100, anchor=E)
        self.charactersTable.heading("Hapiness", text="Hapiness")

        for character in characters:
            self.charactersTable.insert("", "end", values=(character.surname, character.name, 
            character.hunger, character.fear, character.comfort,
            character.happiness))
        self.charactersTable.bind("<Double-1>", self.CTClick)
        self.charactersTable.grid(row=1, rowspan=3, column=1)

    def CTClick(self, event):

        item = self.charactersTable.selection()[0]
        item = int(item[1:])
        print characters[item-1].surname
        print characters[item-1].name

因此,代码获取每行的id,并将其与“字符列表”中的字符相关联。你知道吗

现在我的问题是,由于某种原因,一旦我到达第10行,程序就开始用字母命名其他行,而不是继续。你知道吗

所以ID列表是这样的:

Python treeview list 你可以在控制台的背面看到如果我一行接一行地点击每一行会发生什么。Python在几行中切换到9之后的字母,然后返回正常计数。。。。你知道吗

我怎样才能解决这个问题?有没有办法手动分配一个新的id?你知道吗


Tags: textnameselfcolumnrandomsurnameitemwidth
1条回答
网友
1楼 · 发布于 2024-09-27 00:11:13

好吧,我找到了答案:

item = self.charactersTable.selection()[0]
item = int(item[1:], 16)
print characters[item-1].surname
print characters[item-1].name

将十六进制值转换成十进制值(如果有人遇到同样的问题)

相关问题 更多 >

    热门问题