2017-03-31 111 views
0

我有一個程序使用庫來檢索關鍵字的筆記。 目前,它的偉大工程,但我想在一個功能,讓我來選擇不同的字典使用單選按鈕來改變什麼字典,我在目前正在尋找拉一組不同的音符添加被稱爲根據選擇的單選按鈕搜索不同的字典

詞典:

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

所以我的RadioButtons如下。

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) 

現在我的庫是用被稱爲:

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) 

這工作如何我的預期,但我想知道是否有更好的方法來調用每個字典到這個函數?它只是覺得應該有一個更簡潔的方式來使用較短的代碼執行此任務。

我可能是錯的,但如果任何人有關於此事的一些想法或意見,我將不勝感激。

回答

0

所以一些挖掘和採取什麼Daniel.VanWagnen寫爲起點,之後我想通了,如何凝聚我的if語句了。

我必須創建一個字典,其中包含我用來存儲筆記的不同字典的名稱。我一定要創建鍵以匹配radioButtons變量的值。這使我可以使用當前變量來調用存儲的字典名稱,並將其用於if語句的其餘部分。

我不知道這是否是最好的方式去做這件事,但我已經設法將代碼縮減到比以前更聰明的語句。

現在我需要,才能在未來的更新,如果我是添加更多的音符部分做的是增加一個新的單選按鈕,並採取下一個可用值(在這種情況下4),並添加新的value:dict_name到我的維蘭字典。

我相信我也可以流線這一點,我也會努力,但現在這是我的原始問題,如果任何人有興趣的答案。

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_Container = [rms_notes, vzt_notes, nsr_notes] 

然後:

if e1Current in dictContainer[libvar]: 
相關問題