Je veux choisir parmi une liste de valeurs possibles de type float:Comment commander des entrées dans ipywidgets Dropdown ou Select?
values = [400e-9,435e-9,498e-9]
Le module ipywidgets fournit les widgets Select et qui acceptent Dropdown soit une liste de chaînes, ou un dictionnaire. Dans ce dernier cas, les touches seront affichées et les valeurs seront utilisées lorsque la touche correspondante est sélectionnée. Voir the list of widgets in the docs. En effet, la fourniture directe de ma liste de valeurs génère une erreur car les valeurs sont flottantes, et non pas des chaînes.
# This will raise a TraitError
w = widgets.Select(options=values,description='Select one of the values:')
display(w)
donc créer un dictionnaire et passer ce au widget:
keys = ["{:.2e}".format(val) for val in values]
valsdict = dict(zip(keys,values))
w = widgets.Select(options=valsdict, description='Select one of the values:')
display(w)
Cependant, étant donné que les dictionnaires ne sont pas triés, le widget résultant montre les options dans un ordre apparemment aléatoire. Dans ce cas, quand je l'ai couru, 498e-9 est venu avant 435e-9, comme le montre cette capture d'écran: screenshot of the resulting widget. Donc, la question est, est-il un moyen de trier les entrées dans les widgets de sélection? Une solution de contournement évidente est de fournir le widget uniquement avec ma liste de chaînes (appelée keys
dans l'exemple ci-dessus) et d'implémenter la recherche de la valeur correspondante dans la liste, mais j'espérais qu'il y aurait une solution plus élégante.
Avez-vous envisagé d'utiliser un dictionnaire trié? – nluigi