我想知道是否有可能以某种方式存储隐藏ID以及列表框中的每个条目。这样做的原因是我有一个表,其中包含一个来自数据库的唯一ID(对用户不可见,但用于唯一标识每个记录)我在内存中缓存表并使用键入的字典id
我想创建一个允许我选择其中一条记录的列表框 - 显示的文本不是唯一的ID,而是描述性字段(例如“名称”),这可能是唯一的,但这不是强制执行的而且没有索引。例如,如果我有:
Id Name
-- ----
2 Rod
5 Jane
15 Freddy
然后选择Jane
,我会以某种方式轻松访问ID 5
我的问题是我找不到将唯一ID(5
)与选择(Jane
)相关联的方法,以便我可以轻松识别缓存的记录。我知道我可以使用控制变量,但这只是给我一个列表中所有字符串的列表 - 而不是我想要的。此外,索引(例如插入时)似乎不可靠。
我设法做到这一点的唯一方法是让另一个字典将名称映射到id。由于多种原因,这是次优的。
我在这里遗漏了什么吗?有没有更简单的方法呢?
答案 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存储在不可见列中。