Вопрос

Мой вопрос, если мы сможем присвоить / связывать некоторое значение определенному элементу и скрыть это значение (или, если мы можем сделать то же самое другое путь).

Пример: позволяет сказать столбцы на listccrl - «name» и «описание»:

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 являются:

"Имя"

"Описание"

"Hiddendescription"

Поэтому пользователь наполняет эту текстовую кнопку и нажимает кнопку, чтобы создать элемент, и я в основном хочу только отображать имя и описание и скрыть «hiddendescription», но чтобы сделать это, чтобы я мог использовать его позже.

Извините за объяснение более 1 времени на этом посте, но я хочу убедиться, что вы понимаете, что делаете.

Это было полезно?

Решение

WXListCtrl позволяет связать произвольные данные с элементом, которые не будут отображаться - прочитайте документы для следующих методов:

Setitemdata.

GetItemdata

Finditemdata.

Класс 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 не позволяет вам ассоциировать объект Python с таким предметом wx.TreeCtrl делает с его чрезвычайно полезным SetPyData() метод (и соответствующий GetPyData()).

Я не пробовал это сам, но есть код здесь Это показывает, как создать класс для смешивания в данных Python со списком. Хотя я признаю, мне не понятно, как вы должны использовать его.

Также может быть возможно непосредственно унаследовать от wx.listctrl и добавить соответствующие методы, но я не видел никаких попыток в любом месте, поэтому он может быть сложнее, чем я думаю.

Поочередно вы можете просто использовать SetItemData() Чтобы сохранить int в каждом элементе и используйте это, чтобы индексировать Dict (или список, если элементы заказываются надежно и последовательно), которые содержат связанные объекты. TGRAY уже показал, как это сделать, и он перечислен на странице, а не ссылаться выше, поэтому я не буду проходить через него снова.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top