的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作为你的数据结构,你能保持一个包含所有信息,你想对象的单独列表/字典,并从其他数据结构刷新的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
不会让你喜欢wx.TreeCtrl
其极为有用SetPyData()
方法(和相应的GetPyData()
)确实Python对象与项目相关联。
我还没有尝试过自己,但代码 rel="nofollow">展示了如何创建一类在Python数据与列表中混用。虽然我承认,这是我不明白你怎么打算使用它。
这也可能直接从wx.ListCtrl继承成为可能,并添加适当的方法,但我还没有看到在任何地方的任何企图,所以它可能是难度比我的想法。
或者你可以只使用SetItemData()
存储中的每个项目一个int,并使用该int值索引的字典(或列表,如果该项目被可靠并一致订购)包含关联的对象。 tgray已经展示了如何做到这一点,它的上市在我上面的链接,以及页面,所以我不会再次去了。