3

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

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

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

然后选择Jane,我将能够以某种方式轻松访问 id5

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

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

我在这里错过了什么吗?有没有更简单的方法来做到这一点?

4

2 回答 2

4

将您的 id 保存在列表中,然后使用.curselection()索引将它们映射回行 id,只要您保持顺序相同。

在您的示例中,Jane是列表中的第二个选择,因此如果选择.curselection()返回1. 如果您有一个rowids相同顺序的列表,rowids[1]将是5

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

比将名称映射到字典中的 rowid 稍微高效一些。

于 2012-05-25T09:37:31.410 回答
1

如果您使用ttk.Treeview小部件而不是 Listbox,则可以将 id 存储在不可见的列中。

于 2012-05-25T10:49:06.477 回答