3

リストボックスの各エントリと一緒に非表示のIDを何らかの方法で保存できるかどうか疑問に思っています。この理由は、データベースからの一意のIDを含むテーブルがあるためです(ユーザーには表示されませんが、各レコードを一意に識別するために使用されます)テーブルをメモリにキャッシュし、キーが設定された辞書を使用していますID

レコードの1つを選択できるリストボックスを作成したいのですが、表示されるテキストは一意のIDではなく、おそらく一意の説明フィールド(「名前」など)ですが、これは強制されておらず、インデックスはありません。したがって、たとえば、私が持っている場合:

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

次にJane、を選択すると、どういうわけか簡単にIDにアクセスできるようになります5

私の問題は、キャッシュされたレコードを簡単に識別できるように、一意のID( 5)を選択( )に関連付ける方法が見つからないことです。Jane制御変数を使用できることは知っていますが、これにより、リスト内のすべての文字列のリストが表示されます。必要なものではありません。また、インデックス(たとえば挿入時)は、この目的には信頼できないようです。

私がこれを行うことができた唯一の方法は、名前をIDにマッピングする別の辞書を用意することです。いくつかの理由から、これは最適ではありません。

ここで何かが足りませんか?これを行う簡単な方法はありますか?

4

2 に答える 2

4

ID をリストに保持し、.curselection()インデックスを使用してこれらを行 ID にマップし直します (順序が同じである限り)。

あなたの例でJaneは、がリストの 2 番目の選択肢であるため、選択された場合.curselection()は が返されます1rowids同じ順序のリストがある場合は、次のようにrowids[1]なります5

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

名前をディクショナリ内のROWIDにマッピングするよりもわずかに効率的です。

于 2012-05-25T09:37:31.410 に答える
1

Listbox の代わりにttk.Treeviewウィジェットを使用すると、ID を非表示の列に格納できます。

于 2012-05-25T10:49:06.477 に答える