tkInter列表框中的隐藏ID

时间:2012-05-25 09:20:42

标签: python listbox tkinter

我想知道是否有可能以某种方式存储隐藏ID以及列表框中的每个条目。这样做的原因是我有一个表,其中包含一个来自数据库的唯一ID(对用户不可见,但用于唯一标识每个记录)我在内存中缓存表并使用键入的字典id

我想创建一个允许我选择其中一条记录的列表框 - 显示的文本不是唯一的ID,而是描述性字段(例如“名称”),这可能是唯一的,但这不是强制执行的而且没有索引。例如,如果我有:

Id  Name
--  ----
 2  Rod
 5  Jane
15  Freddy

然后选择Jane,我会以某种方式轻松访问ID 5

我的问题是我找不到将唯一ID(5)与选择(Jane)相关联的方法,以便我可以轻松识别缓存的记录。我知道我可以使用控制变量,但这只是给我一个列表中所有字符串的列表 - 而不是我想要的。此外,索引(例如插入时)似乎不可靠。

我设法做到这一点的唯一方法是让另一个字典将名称映射到id。由于多种原因,这是次优的。

我在这里遗漏了什么吗?有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:3)

将您的ID保存在列表中,然后使用.curselection()索引将这些值映射回行ID,只要保持顺序相同即可。

在您的示例中,Jane是列表中的第二个选项,因此如果选择.curselection(),则返回1。如果您在同一订单中有rowids列表,则rowids[1]将为5

>>> rowids = [2, 5, 15]
>>> rowids[listbox.curselection()]
5

比将名称映射到字典中的rowid更有效。

答案 1 :(得分:1)

如果您使用ttk.Treeview窗口小部件而不是列表框,则可以将ID存储在不可见列中。