Question

J'ai un wxpython listCtrl avec cinq colonnes. Quatre de ces chaînes détiennent, la dernière a des valeurs entières. Je les ai stockés comme des cordes (c'est-à-dire '4', '17', etc.). Cependant, maintenant que j'ai ajouté un ColumnSortermixin pour me permettre de trier les colonnes spécifiques dans la liste, je trouve, bien sûr, que la colonne entière est triée lexicalement plutôt que numériquement.

Existe-t-il un moyen simple de résoudre ce problème?

Était-ce utile?

La solution

Je pense que la façon la plus robuste de faire un tri sur mesure est d'utiliser Tritems () Fonction dans wx.listctrl. Notez que vous devez fournir des données d'élément pour chaque élément (en utilisant SetItemData())

Fournissez simplement votre propre rappel, disons:

def sortColumn(item1, item2):
    try: 
        i1 = int(item1)
        i2 = int(item2)
    except ValueError:
        return cmp(item1, item2)
    else:
        return cmp(i1, i2)

Je ne l'ai pas vérifié, mais quelque chose dans ce sens devrait fonctionner pour toutes les colonnes, sauf si vous avez une colonne où certaines valeurs sont des chaînes représentant des entiers et d'autres ne le sont pas.

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