ListCtrl-wxPython/Python
我的问题是,我们是否可以将某个值分配/绑定到某个项目并隐藏该值(或者我们是否可以以另一种方式执行相同的操作) 示例:假设ListCtrl上的列为“名称”和“说明”: 当我添加一个项目时,我希望它们显示名称参数和描述: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.
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方法,但它们很容易添加。