创建多个函数以在1个结果框中返回单独的字典结果?

时间:2018-12-11 16:24:46

标签: python dictionary tkinter

我花了一些时间来更新我的代码。我正在尝试创建一个返回首字母缩写词的工具。我为字母表中的每个字母创建了单独的字典,并创建了一个结果框以返回首字母缩写所代表的含义。但是,在运行代码时,我只能获取最新的词典以返回结果,即'c'词典中的任何首字母缩写词,并且每次添加新词典时,我都会失去前一个的功能。我是编码的新手,在问这个问题之前,我已经对以前的问题做了很多研究,因此,我们将不胜感激。谢谢。这是我到目前为止的代码:

jest fileToTest.js --globals="$src_dir='dirPath'"

2 个答案:

答案 0 :(得分:1)

您的代码需要一些工作。您正在覆盖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()

结果:

enter image description here

那就是说,实际上有比创建一个单独的具有自己的变量名的字典/条目字段更好的方法。

如果使用列表,则可以将所有词典放入列表中,并将所有输入字段放入列表中,然后获取所有结果。

我们还可以使用文本框按顺序显示所有结果。

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

结果:

enter image description here

答案 1 :(得分:0)

听起来像是因为您要覆盖每个新的“条目”上的条目

entry=Entry(master)

每次创建一个新条目。该可能会导致您在

处看到的行为
  

每次添加新词典时,我都会失去上一个词典的功能