我有一个程序,它使用库来检索关键字的注释。 目前它工作得很好但是我想添加一个功能,允许我选择不同的词典,使用单选按钮来更改我正在搜索的词典。
正在调用字典:
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 :(得分:1)
您可以使用数组索引和单选按钮变量值将它们保存在一个dicts数组中,以访问相关的dict。一旦声明了你的dicts,就像:
dict_Container = [rms_notes, vzt_notes, nsr_notes]
然后:
if e1Current in dictContainer[libvar]:
答案 1 :(得分:0)
所以经过一些挖掘并以Daniel.VanWagnen
写的为起点,我想出了如何压缩我的if语句。
我必须创建一个字典,其中包含我用来存储笔记的不同字典的名称。我确保创建键以匹配radioButtons变量中的值。这允许我使用当前变量来调用存储的字典名称,并在if
语句的其余部分中使用它。
我不确定这是否是执行此操作的最佳方式,但我已设法将代码压缩为比以前更智能的if语句。
现在我要做的就是为了将来更新这个,如果我要添加更多音符部分,就是添加一个新的radioButton并获取下一个可用值(在本例中为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)