2016-07-19 11 views
1

Ich möchte eine Dropdown-Liste mit tk und OptionMenu machen. Ich möchte dem Benutzer eine Zeichenfolge anzeigen ("10 us", "40 us" ...) und eine Zahl (0, 1, ...) zurückgeben, die ein Parameter ist, den ich an eine Variable sende. Es funktioniert gut, aber es ist nicht sortiert. Ich möchte die Liste wie die Variable "lst1" sortieren.Python, Tk und OptionMenu: Wie sortiere ich eine Dropdown-Liste?

enter image description here

Es sollte sein:

  • 10 uns
  • 20 uns
  • 40 uns
  • 80 uns

    lst1 = {"10 us": 0, 
         "20 us": 1, 
         "40 us": 2, 
         "80 us": 3, 
         "160 us": 4, 
         "320 us": 5, 
         "640 us": 6, 
         "1.28 ms": 7, 
         "2.56 ms": 8, 
         "5.12 ms": 9, 
         "10.24 ms": 10} 
    var_tc = StringVar() 
    var_tc.set("40 us") 
    list_tc = OptionMenu(frame, var_tc, *lst1.keys()) 
    list_tc.config(takefocus=1) 
    list_tc.grid(row=10, column=1, padx=2, pady=10) 
    
    param.tc = lst1[var_tc.get()] 
    

Können Sie mir bitte helfen? :)

+0

sortieren Sie die Schlüssel, oder verwenden Sie ein geordnetes Wörterbuch –

Antwort

3

Das Problem ist, dass Sie ein Wörterbuch als Liste verwenden, und Wörterbücher haben keine Ahnung von Ordnung. Zwei Möglichkeiten, wie Sie es tun könnten; Beide sind ziemlich einfach.

Way 1: Gerade sortierte Schlüssel verwenden

Sie müssen viel einfach nicht ändern, wenn Sie in lst1.keys() passieren, Sie stattdessen in sorted(lst1.keys()) passieren, da keys() eine Liste zurückgibt und Sie können eine sortierte eines geben jene.

Way 2: Verwenden Sie ein Wörterbuch, das um

Einer der Python-Standardbibliotheken hält, ist collections, die Nützlichkeit verschiedener viele Container enthält. Eine davon ist die OrderedDict, ein Wörterbuch, das die Reihenfolge beibehält, in der Sie Dinge eingeben. Sie würden es als from collections import OrderedDict importieren und es als jedes andere Objekt initialisieren - lst1 = OrderedDict([("10us",0), ("20us",1), ...])