2 回答

TA贡献2021条经验 获得超8个赞
您的代码需要做一些工作。您正在覆盖entry变量,因此只能访问您创建的最后一个框。这与您master在评论部分中提到的删除无关。您需要做的是为每个字段指定一个唯一的名称。然后对于每个函数,您需要更改content以反映正确的字段。
这是您重新编写的代码,并更改了一些函数/变量名称和间距以反映 PEP8 标准。
import tkinter as tk
acronym_dictionary = {"A": "Annual", "AC": "Air Conditioning"}
acronym_dictionary_b = {"BA": "British Airway", "BB": "BumbleBee"}
acronym_dictionary_c = {"Ca": "Calcium", "Co": "Company"}
def return_entry(event):
content = entry.get()
result = acronym_dictionary.get(content, "Not found")
print(result)
result_box.delete(0, "end")
result_box.insert("end", result)
def return_entry_b(event):
content = entry2.get()
result = acronym_dictionary_b.get(content, "Not found")
print(result)
result_box.delete(0, "end")
result_box.insert("end", result)
def return_entry_c(event):
content = entry3.get()
result = acronym_dictionary_c.get(content, "Not found")
print(result)
result_box.delete(0, "end")
result_box.insert("end", result)
def entry_del():
result_box.delete(0, "end")
entry.delete(0, "end")
entry2.delete(0, "end")
entry3.delete(0, "end")
master = tk.Tk()
master.title("The Acronym Search Engine")
master.geometry('200x110')
tk.Button(master, text="Clear", command=entry_del).grid(row=7, sticky="w")
tk.Label(master, text="A:", anchor="e").grid(row=0, sticky="ew")
tk.Label(master, text="B:", anchor="e").grid(row=1, sticky="ew")
tk.Label(master, text="C:", anchor="e").grid(row=2, sticky="ew")
tk.Label(master, text="Result:").grid(row=3, column=0)
entry = tk.Entry(master)
entry2 = tk.Entry(master)
entry3 = tk.Entry(master)
result_box = tk.Entry(master)
#result_box = tk.Text(master, width=40, height=3)
entry.grid(row=0, column=1, sticky="w")
entry2.grid(row=1, column=1, sticky="w")
entry3.grid(row=2, column=1, sticky="w")
result_box.grid(row=3, column=1, sticky="w")
entry.bind('<Return>', return_entry)
entry2.bind('<Return>', return_entry_b)
entry3.bind('<Return>', return_entry_c)
master.mainloop()
结果:
也就是说,实际上有比使用自己的变量名称创建单独的字典/条目字段更好的方法。
如果我们使用列表,我们可以将所有字典放入一个列表,将所有条目字段放入一个列表,然后获取所有结果。
我们还可以使用文本框按顺序显示所有结果。
import tkinter as tk
acronym_dictionary_list = [{"A": "Annual", "AC": "Air Conditioning"},
{"BA": "British Airway", "BB": "BumbleBee"},
{"CA": "Calcium", "CO": "Company"}]
entry_list = []
def return_entry(event):
result_box.delete(1.0, "end")
for ndex, ent in enumerate(entry_list):
if ent.get().strip() != "":
sub_dict = acronym_dictionary_list[ndex]
result_box.insert("end", "{}\n".format(sub_dict.get(ent.get().strip().upper(), "Not found")))
def entry_del():
result_box.delete(1.0, "end")
master = tk.Tk()
master.title("The Acronym Search Engine")
master.geometry('400x200')
for i in range(3):
tk.Label(master, text="{}:".format(chr(ord('@')+i+1)), anchor="e").grid(row=i, column=0, sticky="ew")
entry_list.append(tk.Entry(master))
entry_list[i].grid(row=i, column=1, sticky="w")
entry_list[i].bind('<Return>', return_entry)
result_box = tk.Text(master, width=40, height=3)
tk.Label(master, text="Result:").grid(row=3, column=0)
result_box.grid(row=3, column=1, sticky="w")
tk.Button(master, text="Clear", command=entry_del).grid(row=7, sticky="w")
master.mainloop()
结果:

TA贡献1805条经验 获得超10个赞
听起来是因为你在每个新的“条目”上覆盖条目
entry=Entry(master)
每次创建一个新条目。这可能会导致您在何处看到的行为
每次我添加一个新词典时,我都会失去以前的功能
添加回答
举报