ListCtrl - wxPython / Python

3 投票
4 回答
5353 浏览
提问于 2025-04-15 21:42

我的问题是,我们是否可以给某个项目分配一个值,并把这个值隐藏起来(或者用其他方式做到同样的事情)。

举个例子:假设在列表控件(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"

还是不明白?好吧,假设我添加一个按钮,用来添加一个项目,并且有一些其他的文本框(TextCtrl)来设置参数,这些文本框的参数是:

“名称”

“描述”

“隐藏描述”

然后用户填写这些文本框后,点击按钮来创建项目,我基本上只想显示名称和描述,而把“隐藏描述”隐藏起来,但我希望这样做是为了以后可以使用它。

抱歉在这篇帖子中解释了好几次,但我想确保你明白我想做的事情。

4 个回答

1

你可以把隐藏的那一列的宽度设置为零,这样可能就能达到你想要的效果。我刚在一个C++(不是wx的)程序里试了一下,效果很好。

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))

当你想使用额外的数据时,你只需要在字典中查找正确的项目,你的数据就会在那里。

4

wxListCtrl 这个控件可以让你把一些不显示的数据和某个项目关联起来。想了解更多,可以看看以下这些方法的说明:

SetItemData

GetItemData

FindItemData

wxListItem 类也有 GetData 和 SetData 这两个方法。

撰写回答