Seite 1 von 1

SetSelection wx.TreeCtrl

Verfasst: Montag 5. Januar 2009, 00:47
von alexander255
Hallo @all,

Ich habe zwei Listen (wx.TreeCtrl) die eine wird in einem Dialog geladen die andere im Hauptframe.

Ist es möglich der Liste im Dialog dasselbe Element auswählen zu lassen wie die Liste im Hauptframe?

(Die Listen werden aus der selben Klasse erzeugt)

HAA Alexander

Verfasst: Montag 5. Januar 2009, 12:46
von martin101986
Hallo,

eine TreeCtrl hat folgende Methoden zur Verfügung um die ausgewählten Elemente zu bekommen:

GetSelection() für ein ausgewähltes Element.

GetSelections() für mehrere ausgewählte Elemente.
Dafür muss beim Style wxTR_MULTIPLE angegeben werden damit GetSelections funktioniert.

Ein Element kannst du mit SelectItem(itemid, True) markieren.


Grüße
Martin

Verfasst: Montag 5. Januar 2009, 15:01
von alexander255
SelectItem geht aber nur innerhalb einer Liste im Hauptframe oder Dialog, austauschbar ist der Wert nicht, oder...?

HAA Alexander

Verfasst: Dienstag 6. Januar 2009, 09:36
von martin101986
Hallo,

Mit GetItem(itemid, columnnumber) erhälst du eine wxListItem. Dieses kannst du dann entsprechend bearbeiten und über SetItem(listitem) wieder bei der Liste setzen.

Grüße
Martin

Verfasst: Dienstag 6. Januar 2009, 19:43
von alexander255
@martin: Mit GetItem(itemid, columnnumber) erhälst du eine wxListItem. Dieses kannst du dann entsprechend bearbeiten und über SetItem(listitem) wieder bei der Liste setzen.
Ich meinte eigentlich die hierarchischen Listen (sprich Baumstruktur, wxTreeCtrl mit wx.TreeItemId) da kann man leider nicht sagen: SelectItemWithPyData(...) oder so.

Kennt noch jemand einen Tipp?

Verfasst: Donnerstag 8. Januar 2009, 14:47
von alexander255
Hallo?

Verfasst: Freitag 9. Januar 2009, 21:10
von alexander255
Kann GTK oder QT sowas?

Verfasst: Montag 12. Januar 2009, 17:42
von alexander255
Es lebe WX...

Verfasst: Montag 12. Januar 2009, 19:04
von Leonidas
Offensichtlich weiß das hier niemand oder hat keine Zeit. Schonmal die Mailingliste befragt?

Die Lösung...

Verfasst: Dienstag 3. Februar 2009, 21:21
von alexander255
Ich habe bei der Erstellung der Liste eine ID als PyData mitlaufen lassen, welche über

Code: Alles auswählen

parent_tree.GetItemPyData(parent_tree.GetSelection())
abgefragt und mithilfe von

Code: Alles auswählen

	def GetItemsWithPyData(self, PyData, parent=None):
		if not parent: parent = self.GetRootItem()
		items    = []
		children = self.GetChildren(parent)
		for child in children:
			print(self.GetItemPyData(child))
			if self.GetItemPyData(child) is PyData:
				items.append(child)
			if self.ItemHasChildren(child):
				items.extend(self.GetItemsWithPyData(PyData, child))
		return items
aus der Dialogliste herausgepickt wird...

Natürlich nicht der Stein der Waisen aber brauchbar genug. :)

HNAA Alexander