3

私の質問は、特定のアイテムに値を割り当て/バインドしてその値を非表示にできるかどうか(または同じことを別の方法で実行できるかどうか)です。

例:ListCtrlの列が「名前」と「説明」であるとします。

self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
self.lc.InsertColumn(0, 'Name')
self.lc.InsertColumn(1, 'Description')

また、アイテムを追加するときに、Nameパラメーターと説明を表示するようにします。

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」を非表示にしますが、後で使用できるようにします。

この投稿で2回以上説明して申し訳ありませんが、私がしているふりを理解してもらいたいと思います。

4

4 に答える 4

7

ListCtrl をデータ構造として使用する代わりに、必要なすべての情報を含むオブジェクトの別のリスト/辞書を保持し、他のデータ構造から 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))

次に、追加のデータを使用する場合は、辞書で正しい項目を検索するだけで、データがそこに表示されます。

于 2010-04-16T21:40:54.730 に答える
4

wxListCtrl を使用すると、表示されない項目に任意のデータを関連付けることができます。次の方法についてはドキュメントを参照してください。

SetItemData

GetItemData

FindItemData

wxListItem クラスには、GetData および SetData メソッドもあります。

于 2010-04-16T21:27:09.343 に答える
1

非表示の列の幅をいつでもゼロに設定できます。これにより、目的が達成される場合があります。C++ (非 wx) プログラムで試してみたところ、問題なく動作しました。

于 2010-04-16T21:00:19.783 に答える
1

wx.ListCtrlwx.TreeCtrl非常に便利なSetPyData()メソッド (および対応する)のように、python オブジェクトをアイテムに関連付けることはできませんGetPyData()

私は自分で試したことはありませんが、python データとリストを混在させるクラスを作成する方法を示すコードがここにあります。認めますが、あなたがそれをどのように使用するつもりなのかは私には明らかではありません.

wx.ListCtrl を直接継承して適当なメソッドを追加することも可能かもしれませんが、どこにもそのような試みは見られないので、思ったより難しいかもしれません。

SetItemData()または、各項目に int を格納するために使用し、その int を使用して、関連付けられたオブジェクトを含む dict (または、項目が確実かつ一貫して順序付けられている場合はリスト) にインデックスを付けることができます。tgray は既にこれを行う方法を示しており、上記のリンク先のページにもリストされているため、再度説明することはありません。

于 2012-01-11T02:50:53.323 に答える