ListCtrl - wxPython / Python

时间:2010-04-16 20:46:26

标签: python wxpython listctrl

我的问题是,我们是否可以将某个值分配/绑定到某个项目并隐藏该值(或者如果我们可以用另一种方式执行相同的操作)。

示例:假设ListCtrl上的列是“Name”和“Description”:

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”

然后,用户填写此文本文本并单击按钮以创建项目,我基本上只想显示名称和描述并隐藏“HiddenDescription”但是这样做以便我以后可以使用它。

很抱歉在这篇文章中解释了一次以上,但我想确保你理解我的假装。<​​/ p>

4 个答案:

答案 0 :(得分: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))

然后,当您想要使用其他数据时,您只需在字典中查找正确的项目,您的数据就会在那里。

答案 1 :(得分:4)

wxListCtrl允许您将任意数据与不会显示的项目相关联 - 请阅读以下方法的文档:

SetItemData

GetItemData

FindItemData

wxListItem类也有GetData和SetData方法。

答案 2 :(得分:1)

您始终可以将隐藏列的宽度设置为零,这可能会达到您想要的效果。我只是在C ++(非wx)程序中尝试过,它工作正常。

答案 3 :(得分:1)

wx.ListCtrl不允许您将python对象与wx.TreeCtrl之类的项与其非常有用的SetPyData()方法(以及相应的GetPyData())相关联。

我自己没有尝试过,但是代码here显示了如何创建一个类以将python数据与列表混合在一起。虽然我承认,但我不清楚你是如何使用它的。

也可以直接从wx.ListCtrl继承,并添加适当的方法,但我没有看到任何尝试,所以它可能比我想的更难。

或者,您可以使用SetItemData()在每个项目中存储int,并使用该int来索引包含关联对象的dict(或列表,如果项目可靠且一致地排序)。 tgray已经展示了如何做到这一点,它也在我上面链接的页面上列出,所以我不会再重复它了。