2017-03-31 15 views
0

ライブラリでキーワードを検索するプログラムがあります。 は、現在、それはしかし、私は私が私が現在で探しています何辞書変更するには、ラジオボタンを使用してノートの異なるセットを引っ張って別の辞書を選択することができるようになる機能を追加したい素晴らしい作品と呼ばれてラジオボタンが選択されているかどうかに応じて別の辞書を検索する

辞書:。

rms_notes = { "SomeKey" : "Some random notes" } 
vzt_notes = { "SomeKey" : "Some random notes" } 
nsr_notes = { "SomeKey" : "Some random notes" } 

私のRadioButtonsは以下の通りです。

keywordEntry = Entry(root) 
keywordEntry.bind('<Return>', kw_entry) 
KeywordEntry.place(#all the formatting here) 

そして、次のように私はラジオボタンが選択されている間、それぞれ異なる辞書にアクセスするために使用する機能は次のとおりです:

v1 = IntVar() 
def kw_entry(event=None): 
    libvar = v1.get() 
    e1Current = keywordEntry.get().lower() 
    if libvar == 1: 
     if e1Current in rms_notes: 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, rms_notes[e1Current]) 
      root.text.see(tkinter.END) 
     else: 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, "Not a Keyword") 
      root.text.see(tkinter.END) 
    elif libvar == 2: 
     if e1Current in vzt_notes: 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, vzt_notes[e1Current]) 
      root.text.see(tkinter.END) 
     else: 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, "Not a Keyword") 
      root.text.see(tkinter.END) 
    elif libvar == 3: 
     if e1Current in nsr_notes: 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, nsr_notes[e1Current]) 
      root.text.see(tkinter.END) 
     else: 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, "Not a Keyword") 
      root.text.see(tkinter.END) 
    else: 
     root.text.delete(1.0, END) 
     root.text.insert(tkinter.END, "No Library select") 
     root.text.see(tkinter.END) 

この今、私のライブラリを使用して呼ばれているため

RaBu1 = tkinter.Radiobutton(root,text="Lib1",variable = vl, value = 1) 
RaBu2 = tkinter.Radiobutton(root,text="Lib2",variable = vl, value = 2) 
RaBu3 = tkinter.Radiobutton(root,text="Lib3",variable = vl, value = 3) 
RaBu1.place(#all the formatting here) 
RaBu2.place(#all the formatting here) 
RaBu3.place(#all the formatting here) 

どのように私は期待して動作しますが、私はこの関数に各辞書を呼び出すためのより良い方法があるのだろうか?より短いコードでこのタスクを実行するためのよりクリーンな方法があるように感じるだけです。

私は間違っているかもしれませんが、誰かがいくつかのアイデアを持っているか、問題に入力していただければ幸いです。

答えて

0

のでDaniel.VanWagnenが出発点として書いたものをいくつかの掘削と取った後、私はダウン私のif文を凝縮する方法を考え出しました。

メモを保存するために作成した別の辞書の名前を含む辞書を作成する必要がありました。radioButtons変数の値と一致するようにキーを作成しました。これにより、現在の変数を使用してストアド・ディクショナリ名を呼び出し、それを残りのifステートメントで使用することができました。

これが最善の方法であるかどうかはわかりませんが、以前よりもスマートなif文にコードを凝縮させることができました。

今、私はより多くのノートセクションを追加した場合、将来的にこれを更新するためにしなければならないすべては、新しいラジオボタンを追加し、(この場合は4で)次の使用可能な値を取り、新しいvalue:dict_nameを追加することです私のvrange辞書。

私はこれも同様にストリームすることができると確信しています。私もそれに取り組んでいますが、今のところこれは誰でも興味があれば私の元の質問に対する答えです。

v1 = IntVar() 


def update_var(event=None): 
    current_var = v1.get() 
    e1Current = keywordEntry.get().lower() 
    vrange= {1: vzt_notes,2:rms_notes,3:nsr_notes} 
    if current_var in vrange: 
     note_var = vrange[current_var] 
     if e1Current in note_var: 
      note_var = vrange[current_var] 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, note_var[e1Current]) 
      root.text.see(tkinter.END) 
     else: 
      root.text.delete(1.0, END) 
      root.text.insert(tkinter.END, "Not a Keyword") 
      root.text.see(tkinter.END) 
    else: 
     root.text.delete(1.0, END) 
     root.text.insert(tkinter.END, "No Library Selected") 
     root.text.see(tkinter.END) 
1

配列のインデックスと問題のdictにアクセスするラジオボタンの変数値を使用して、dictsの配列でそれらを保持できます。あなたのdictsが宣言されると、何かのように:次に

dict_Container = [rms_notes, vzt_notes, nsr_notes] 

if e1Current in dictContainer[libvar]: 
関連する問題