Frage

Meine Frage ist, wenn wir zuweisen / bind einen gewissen Wert zu einem bestimmten Punkt und zu verstecken, dass Wert (oder, wenn wir die gleiche Sache auf eine andere Weise tun können).

Beispiel: Nehmen wir an, die Spalten auf ListCtrl sind "Name" und "Beschreibung":

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

Und wenn ich hinzufügen, einen Artikel, den ich sie will den Parameter Namen zeigen, und die Beschreibung:

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

Nun, was ich tun möchte, ist im Grunde assign etwas in diesem Element, das nicht gezeigt ist, so dass ich später auf die App zugreifen können.

So möchte ich etwas hinzufügen, die nicht auf der App angezeigt wird, ist aber auf dem Elementwert wie:

hiddendescription = "Somerandomthing"

immer noch nicht undestand? Nun können sagen, dass ich einen Knopf fügen Sie ein Element mit einigen anderen TextCtrls hinzufügen, um die Parameter einzustellen und die TextCtrls Parameter sind:

"Name"

"Beschreibung"

"Hiddendescription"

So dann füllt der Benutzer diese textctrls aus und klickt auf die Schaltfläche um das Element zu erstellen, und ich möchte im Grunde nur den Namen und die Beschreibung zeigen und verstecken die „HiddenDescription“ aber, es zu tun, damit ich es später verwenden können.

Es tut uns erklären, mehr als 1 Mal zu diesem Beitrag, aber ich sicherstellen möchten, verstehen Sie, was ich so tun, als zu tun.

War es hilfreich?

Lösung

die wxListCtrl können Sie beliebige Daten mit einem Element zugeordnet werden, die angezeigt wird, nicht - lesen Sie die Dokumentation für die folgenden Methoden:

SetItemData

GetItemData

FindItemData

Die auch wxListItem Klasse hat GetData und SetData Methoden.

Andere Tipps

Statt die ListCtrl als Datenstruktur verwenden, können Sie eine separate Liste / dict von Objekten halten konnte, die alle Informationen enthalten, die Sie wollen, und aktualisieren Sie die ListCtrl von Ihren anderen Datenstruktur.

Zum Beispiel:

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

Dann in der Anwendung:

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

Dann, wenn Sie Ihre zusätzlichen Daten verwenden möchten, können Sie einfach das richtige Element im Wörterbuch nachschlagen und Ihre Daten werden dort sein.

Sie können immer die Breite der verdeckte Spalte auf Null gesetzt, das erreichen könnte, was Sie wollen. Ich habe gerade versucht es in einem C ++ (nicht-wx) Programm, und es hat gut funktioniert.

wx.ListCtrl Sie nicht lassen ein Python-Objekt mit einem Element zugeordnet werden wie wx.TreeCtrl tut mit seiner äußerst nützlich SetPyData() Verfahren (und entsprechende GetPyData()).

Ich habe es selbst nicht ausprobiert, aber es gibt code , dass zeigt, wie erstellen eine Klasse mit einer Liste in python-Daten zu mischen. Obwohl ich gebe zu, es ist mir nicht klar, wie Sie es verwenden gemeint sind.

Es könnte auch möglich sein, direkt von wx.ListCtrl erben und die entsprechenden Methoden hinzufügen, aber ich habe keine Versuche, die überall zu sehen, so dass es schwieriger sein kann als ich denke bin.

Alternativ können Sie einfach SetItemData() verwenden, um einen int in jedem Element zu speichern, und verwenden Sie diese int zum Indexieren einer dict (oder Liste, wenn die Einzelteile zuverlässig und konsistent bestellt), die die zugehörigen Objekte enthält. tgray hat bereits gezeigt, wie dies zu tun, und es auf der Seite aufgeführt ist ich oben als auch verknüpfen, so dass ich nicht wieder gehen über.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top