Question

Ma question est de savoir si nous pouvons attribuer / lier une certaine valeur à un certain point et cacher cette valeur (ou si nous pouvons faire la même chose d'une autre manière).

Exemple: Disons que les colonnes ListCtrl sont "Nom" et "Description":

self.lc = wx.ListCtrl(self, -1, style=wx.LC_REPORT)
self.lc.InsertColumn(0, 'Name')
self.lc.InsertColumn(1, 'Description')

Et quand j'ajoute un élément que je veux qu'ils montrent le paramètre Nom et la description:

num_items = self.lc.GetItemCount()
        self.lc.InsertStringItem(num_items, "Randomname")
        self.lc.SetStringItem(num_items, 1, "Some description here")

Maintenant, ce que je veux faire est fondamentalement quelque chose assign à cet élément qui ne figure pas pour que je puisse accéder à plus tard l'application.

Je voudrais ajouter quelque chose qui ne figure pas sur l'application, mais est sur la valeur de l'élément comme:

hiddendescription = "Somerandomthing"

n'a toujours pas undestand? LETS bien dire que j'ajouter un bouton pour ajouter un élément avec d'autres TextCtrls pour définir les paramètres et les paramètres TextCtrls sont:

"Nom"

"Description"

"Hiddendescription"

Alors l'utilisateur remplit cette textctrls out et clique sur le bouton pour créer l'élément, et je veux essentiellement que pour montrer le nom et la description et cacher la « HiddenDescription » mais de le faire pour que je puisse l'utiliser plus tard.

Désolé pour expliquer plus de 1 fois sur ce post mais je veux vous assurer que vous comprenez ce que je fais semblant de le faire.

Était-ce utile?

La solution

la wxListCtrl vous permet d'associer des données arbitraires avec un élément, qui ne sera pas affiché - lire la documentation pour les méthodes suivantes:

SetItemData

GetItemData

FindItemData

La classe wxListItem a également des méthodes GetData et SetData.

Autres conseils

Au lieu d'utiliser la ListCtrl comme structure de données, vous pouvez garder une liste / dict séparée des objets qui contiennent toutes les informations que vous souhaitez et actualiser la ListCtrl de votre autre structure de données.

Par exemple:

class MyObject(object):
    def __init__(self, name, description, hidden_description):
        self.name = name
        self.description = description
        self.hidden_description = hidden_description

Ensuite, dans votre application:

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

Ensuite, lorsque vous voulez utiliser vos données supplémentaires que vous pouvez juste regarder le bon article dans le dictionnaire et vos données sera là.

Vous pouvez toujours définir la largeur de la colonne cachée à zéro, qui pourrait accomplir ce que vous voulez. Je viens d'essayer dans un programme C ++ (non WX) et il a bien fonctionné.

wx.ListCtrl ne vous permet pas d'associer un objet python avec un élément comme wx.TreeCtrl fait avec sa méthode SetPyData() extrêmement utile (et GetPyData() correspondant).

Je n'ai pas essayé moi-même, mais il y a code qui montre comment créer une classe de mélanger des données python avec une liste. Bien que je l'avoue, ce n'est pas clair pour moi comment vous êtes censé l'utiliser.

Il pourrait aussi être possible directement hériter de wx.ListCtrl et ajouter les méthodes appropriées, mais je n'ai vu aucune tentative à ce partout, il peut être plus difficile que ce que je pense.

Sinon, vous pouvez simplement utiliser SetItemData() pour stocker un int dans chaque élément, et l'utiliser pour indexer un int dict (ou une liste, si les articles sont commandés de manière fiable et cohérente) qui contient les objets associés. tgray a déjà montré comment faire, et il est inscrit à la page I lien ci-dessus et, donc je ne vais pas revenir là-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top