Создать несколько функций для возврата отдельных результатов словаря в 1 поле результатов? - PullRequest
0 голосов
/ 11 декабря 2018

Я потратил некоторое время на обновление своего кода.Я пытаюсь создать инструмент, который возвращает аббревиатуры.Я создал отдельные словари для каждой буквы алфавита и создал окно результатов, чтобы вернуть то, что означает аббревиатура.Однако при выполнении кода я могу получить только последний словарь, который возвращает результат, т. Е. Любые сокращения в словаре 'c', и каждый раз, когда я добавляю новый словарь, я теряю функцию предыдущего.Я довольно новичок в программировании, и перед тем, как задавать этот вопрос, я провел много исследований предыдущих вопросов, поэтому любая помощь будет принята с благодарностью.Благодарю.Вот код, который у меня есть:

from tkinter import*

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(en):
    content= entry.get()
    result= acronym_dictionary.get(content, "Not found")
    print(result)
    resultBox.delete(0,END)
    resultBox.insert(0,result)

def Return_EntryB(en):
    content= entry.get()
    result= acronym_dictionary_b.get(content, "Not found")
    print(result)
    resultBox.delete(0,END)
    resultBox.insert(0,result)`

def Return_EntryC(en):
    content= entry.get()
    result= acronym_dictionary_c.get(content, "Not found")
    print(result)
    resultBox.delete(0,END)
    resultBox.insert(0,result)

def EntryDel():
    resultBox.delete(0,END)
    entry.delete(0,END)

master=Tk()
master.title("The Acronym Search Engine")
master.geometry('500x400')`



Button(master, text="Clear",command=EntryDel).grid(row=7, sticky=W)`

Label(master, text="A:").grid(row=0, sticky=W)
entry=Entry()
entry.grid(row=0, column=1)
entry.bind('<Return>', Return_Entry)

Label(master, text="B:").grid(row=1, sticky=W)
entry=Entry()
entry.grid(row=1, column=1)
entry.bind('<Return>', Return_EntryB)`

Label(master, text="C:").grid(row=2, sticky=W)
entry=Entry()
entry.grid(row=2, column=1)
entry.bind('<Return>',Return_EntryC)

Label(master, text="Result:").grid( row=3,column=0 )
resultBox=Entry(master)
resultBox.grid(row=3,column=1)

mainloop()

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вашему коду нужно было немного поработать.Вы перезаписывали переменную 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

0 голосов
/ 11 декабря 2018

Звучит так, как будто вы перезаписываете запись для каждой новой "Записи"

entry=Entry(master)

Создает новую запись каждый раз.Это вероятно вызывает поведение, которое вы видите, где

каждый раз, когда я добавляю новый словарь, я теряю функцию предыдущего

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...