2016-07-19 3 views
1

tkとOptionMenuでドロップダウンリストを作成したいと思います。私はユーザーに文字列( "10 us"、 "40 us" ...)を表示し、変数に送るパラメータである数値(0、1、...)を返したいと思います。それはうまく動作しますが、ソートされていません。私は変数 "lst1"のようなリストをソートしたい。Python、Tk、OptionMenu:ドロップダウンリストをソートする方法は?

enter image description here

それは次のようになります。

  • 10私たち
  • 20私たち
  • 40私たち
  • 80私たち

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

私を助けてもらえますか? :)

+0

キーをソートするか、または順序付き辞書を使用する –

答えて

3

問題は、辞書をリストとして使用しており、辞書には発注の概念がないことです。あなたがそれをすることができる2つの方法;どちらもかなり簡単です。

ウェイ1:ちょうどあなたがlst1.keys()に渡すときだけ、あなたが代わりにkeys()のリストを返すために、sorted(lst1.keys())に渡し、あなたがのソート1を与えることができ、あなたはあまり変更する必要はありませんソートキー

を使用それら。

ウェイ2:オーダー

を維持した辞書を使用して、Pythonの標準ライブラリの一つは、様々な有用性の多くのコンテナが含まれている、collectionsです。その1つはOrderedDictです。辞書は物事を入力する順序を保持しています。 from collections import OrderedDictとしてインポートし、それを他のオブジェクトとして初期化する - lst1 = OrderedDict([("10us",0), ("20us",1), ...])

関連する問題