ListCtrl-wxPython/Python

ListCtrl-wxPython/Python,python,wxpython,listctrl,Python,Wxpython,Listctrl,我的问题是,我们是否可以将某个值分配/绑定到某个项目并隐藏该值(或者我们是否可以以另一种方式执行相同的操作) 示例:假设ListCtrl上的列为“名称”和“说明”: 当我添加一个项目时,我希望它们显示名称参数和描述: self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT) self.lc.InsertColumn(0, 'Name') self.lc.InsertColumn(1, 'Description') num_items = self.

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

示例:假设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”,但要这样做,我以后可以使用它


很抱歉在这篇文章中解释了不止一次,但我想确保你理解我假装做的事情。

你可以始终将隐藏列的宽度设置为零,这可能会实现你想要的。我只是在C++(非WX)程序中尝试过,它工作得很好。

允许WxListCtRL将任意数据与一个不显示的项相关联。


wxListItem类还具有GetData和SetData方法。

不使用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))

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

wx.ListCtrl
不允许您将python对象与一个项相关联,例如
wx.TreeCtrl
与它极其有用的
SetPyData()
方法(以及相应的
GetPyData())

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

也可以直接从wx.ListCtrl继承,并添加适当的方法,但我还没有看到任何尝试,因此可能比我想象的要困难


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

好的,谢谢你的帮助,如果没有小问题,这将是一个好主意,当我去调整描述列的大小时,它似乎会调整描述列和显示信息的HiddenScription列的大小。。。不过还是要谢谢你!没想到这个,多谢了,我要试试这个方法!除非我遗漏了什么,否则这不会让你关联任意数据,而是让你关联一个整数。这仅在您使用“任意数据”时才有用。@Cam:您说得对。如果需要存储任意python对象,则需要将其放入dict中并存储密钥。在wxpythonwiki上,有一个mixin类,它添加了一个SetPyData方法来自动执行此操作。它缺少GetPyData和FindPyData方法,但它们很容易添加。