2017-08-27 4 views
0

私はいくつかのオブジェクトを表示するリストボックスを持っている:PythonのTkinterは:[挿入リストボックスにオブジェクト、および(ない文字列として)それらを出す

# extra is some array of 'extra' objects I get from a database 
self.extrasList = Listbox(self, selectmode='multiple') 
self.extrasList.pack(fill=X, expand=True) 
for extra in extras: 
    self.extrasList.insert(END, extra) 

extraオブジェクトは、__str__をオーバーライド持っているので、彼らはうまく表示。

しかし、ときに私は、その後の操作を行います。

selection = self.extrasList.curselection() 
extra = self.extrasList.get(selection[0]) #this is now a string rather than the proper 'extra' object 

はバックリストボックスのうち、オブジェクトを取得する方法はありますか? 文字列ではなく?

リストボックスと他のリストを手動で同期させることができたのは私だけでした。しかし、これはかなり誤りです。

+0

「extras」リストには何が含まれていますか? – skrx

+0

@skrxちょうどいくつかのsqlalchemyオブジェクト。彼らは名前と価格を持っています。これ以上何もない。 –

答えて

1

いいえ、文字列以外のものとしてリストボックスからデータを取得する方法はありません。

+0

ああ:(それはうんざりします。これを可能にする他の要素がありますか?自分のラッパーだけを作成していますか? –

+1

@TheOddler:独自のラッパーを作成する必要があります。 –

0

オブジェクトを辞書に入れて(キーとしての文字列と値としてのオブジェクト)、リストボックスにキーを挿入して、選択したキーをlistbox.selection_get().split()で取得し、それらを使用して目的の値を取得しますdictの外にあるオブジェクト。

import tkinter as tk 

root = tk.Tk() 

def print_selection(event): 
    for key in listbox.selection_get().split(): 
     print(extras[key]) 

extras = { 
    'object1': 1, 
    'object2': 2, 
    } 

listbox = tk.Listbox(root, selectmode='multiple') 
for key in extras: 
    listbox.insert('end', key) 
listbox.grid(row=0, column=0) 
listbox.bind('<Key-Return>', print_selection) 
tk.mainloop() 
関連する問題