2010-12-13 10 views
2

私はそれぞれ固有のラベルとIDを持つVertexオブジェクトのリストを持っています。このリストをwxPythonコンボボックスのモデルとして使用するにはどうすればいいですか?ユーザーがオプションを選択したときにすぐに頂点IDを取得できますか?wxPythonコンボボックスに文字列以外のオブジェクトを保存するにはどうすればよいですか?

ComboBoxは文字列をモデルとしてのみ受け付けているようです。ラベルが重複しているので、ラベル対IDペアの辞書を作成することはできません。

特化したコンボボックスを作成するためにサブクラス化できるComboCtrlクラスに気付きましたが、これには簡単な解決策があるように感じます。

+0

'labels + id'はどうですか? – katrielalex

+0

それはうまくいくでしょう。ラベル+ idをidにマップする辞書を作成するか、文字列の最後の部分を抽出してidに変換する辞書を作成できます。それでも、単にオブジェクトを格納する簡単な方法があるのだろうかと思います。ありがとう。 – bgoosman

答えて

5

このトピックでは、以前の今日wxPythonのIRCチャンネルにアップしてきたが、リストボックスに関してインチ幸いなことに、両方のウィジェットはwx.ItemContainerから継承するので、あなたは、次の操作を行うことができます動作するはずです

itemObject = self.myCboBox.GetClientData(self.myCboBox.GetSelection()) 
itemID = itemObject.id 

for item in ObjList: 
    self.myCboBox.append(item.label, item) 

その後、イベントハンドラでは、あなたのような何かをしたいです。

+0

ありがとうございます!それはうまくいくはずです。 – bgoosman

+0

それはうまく動作します。正解と表示されます。 – bgoosman

+0

したがって、itemObject.idを指定してwx.ComboBoxの選択をどのように設定しますか? – tponthieux

0

最も単純なアプローチは、頂点をリストに格納し、インデックス(wx.ComboBox GetSelection()によって返される)によって選択された値を取得することです。

編集: Q & D例:

l = [{"value" : value_1, "label" : "label"}, 
    {"value" : value_2, "label" : "label"}] 

def on_select (event): 
    i = event.GetSelection() 
    print (l[i]["value"]) 

# ui construction omitted  

Bind (wx.EVT_COMBOBOX, on_slect) 
+0

これはまさに私がやっていることですが、idの代わりに頂点ラベルを表示したいと思います。 – bgoosman

+0

@bgoosman:追加されたサンプルスニペット。アイデアは、uiに "ラベル"キーを使用するが、選択時に値を検索すること(辞書のリストは任意に選択された、タプルのリストまたは代わりにリストのリスト)。 –

+0

これは、ラベルとIDの間に1対1のマッピングを作成するために、配列の各頂点のランクを使用するという考えですか? – bgoosman

関連する問題