listctrl -wxpython / python
質問
私の質問は、特定のアイテムに何らかの値を割り当て/バインドして、その値を非表示にできるかどうかです(または、別の方法で同じことをすることができるかどうか)。
例:listctrlの列が「名前」と「説明」であるとしましょう。
self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
self.lc.InsertColumn(0, 'Name')
self.lc.InsertColumn(1, 'Description')
アイテムを追加するとき、名前パラメーターと説明を表示してほしい。
num_items = self.lc.GetItemCount()
self.lc.InsertStringItem(num_items, "Randomname")
self.lc.SetStringItem(num_items, 1, "Some description here")
これで、私がやりたいことは、基本的に表示されていないアイテムに何かを割り当てることです。
だから、アプリに表示されないが、次のようなアイテム値にあるものを追加したいと思います。
hiddendescription = "Somerandomthing"
まだ不足していませんでしたか?さて、他のTextCTRLSを備えたアイテムを追加するボタンを追加して、パラメーターを設定し、textCTRLSパラメーターを次のように設定します。
"名前"
"説明"
「hiddendescription」
そのため、ユーザーはこのtextctrlsを入力してボタンをクリックしてアイテムを作成します。基本的には、名前と説明を表示し、「hiddendescription」を非表示にしたいのですが、後で使用できるようにします。
この投稿で1回以上説明して申し訳ありませんが、私が何をしているのかを理解してください。
解決
wxlistctrlでは、任意のデータをアイテムに関連付けることができます。
WXLISTITEMクラスには、GetDataおよびSetDataメソッドもあります。
他のヒント
ListCtrlをデータ構造として使用する代わりに、必要なすべての情報を含むオブジェクトの個別のリスト/DICTを保持し、他のデータ構造からListCtrlを更新できます。
例えば:
class MyObject(object):
def __init__(self, name, description, hidden_description):
self.name = name
self.description = description
self.hidden_description = hidden_description
次に、アプリケーションで:
def __init__(self):
self.my_items = {}
self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
self.lc.InsertColumn(0, 'Name')
self.lc.InsertColumn(1, 'Description')
def addItemToMyListCtrl(self, name, description, hidden):
new_item = MyObject(name, description, hidden)
self.my_items[name] = new_item
self.lc.Append((new_item.name, new_item.description))
その後、追加のデータを使用する場合は、辞書の正しいアイテムを調べるだけで、データがそこにあります。
隠された列の幅をゼロに常に設定することができます。 C ++(非WX)プログラムで試したばかりで、うまくいきました。
wx.ListCtrl
Pythonオブジェクトを次のようなアイテムに関連付けることはできません wx.TreeCtrl
非常に便利です SetPyData()
メソッド(および対応する GetPyData()
).
自分で試したことはありませんが、コードがあります ここ これは、Pythonデータをリストで混合するクラスを作成する方法を示しています。私は認めますが、あなたがそれをどのように使用するつもりなのかは私には明確ではありません。
また、wx.listctrlから直接継承して適切な方法を追加することも可能かもしれませんが、どこにも試みを見ていないので、私が考えているよりも難しいかもしれません。
または、使用するだけです SetItemData()
各アイテムにINTを保存し、そのINTを使用して、関連するオブジェクトを含むアイテムが確実かつ一貫して注文されている場合は、DICT(またはリスト)をインデックス付けします。 Tgrayはすでにこれを行う方法を示しており、上記のリンクもリンクしているページにリストされているので、もう一度やりません。