Как получить записи из функции .get()?

#python #tkinter

#python #tkinter

Вопрос:

У меня возникли проблемы со всем, что связано с этим, это должен быть словарь и переводчик, но я отказался от части с переводчиком. Прямо сейчас программа не может получить никаких записей из функции .get().

     from tkinter import *
import tkinter as tk
import json
from difflib import get_close_matches
from googletrans import Translator
#LIBs are done#
root = Tk()
root.geometry('300x500')
root.configure(background = '#71baff')
#Window Created#
data = json.load(open('data.json'))
translator = Translator()
#Dictionary data has been read#

#Variables attened#


#BACKEND ENDED#


#FRONTEND#

welcome = tk.Label(root, text = 'Welcome to the Dictionary amp; Translator App', bg = '#71baff', fg = '#ffffff')
welcome.pack()
emptylab = tk.Label(root, bg = '#71baff')
emptylab.pack()
defq = tk.Label(root, text = 'Enter the word : ', bg = '#71baff', fg = '#ffffff')
defq.pack()
defentry = tk.Entry(root, bg = '#71baff', fg = '#ffffff')
defentry.pack()
defin = defentry.get()
def getMeaning(w):        
    defin = defentry.get()
        
    if w in data:
        return data[w]
    elif w.title() in data:
        return data[w.title]
    elif len(get_close_matches(w, data.keys())) > 0:
        return data[get_close_matches(w, data.keys()) [0]]
    else :
        return 'The word does not exist'

emptylab = tk.Label(root, bg = '#71baff')
emptylab.pack()
defbutton = tk.Button(root, text = 'Get Definition!', bg = '#71baff', fg = '#71baff', command = getMeaning(defin))
defbutton.pack()
output = getMeaning(defin)
outputlabel = tk.Label(root, bg = '#71baff', fg = '#ffffff', text = output)#need to add text after the functions for the output are done#
outputlabel.pack()



root.mainloop()
  

Комментарии:

1. Можете ли вы более конкретно рассказать о том, с какой проблемой вы столкнулись? Вы проводили какую-либо отладку? Вы получаете ошибку при запуске этого? Что происходит?

2. Переместите функцию getMeaning(w): выше welcome , и это может устранить проблему, кстати, в чем ошибка? почему вы не можете использовать get() , упомяните это в своем коде

3. ошибки нет, но есть проблема. Проблема в том, что при запуске программы независимо от того, что вы вводите в поле ввода, значение output всегда пустое

4. Что вы сделали для отладки этого? Вы убедились, что defin это то, что вы ожидаете? Вы убедились, что w.title() это то, что вы ожидаете? Как насчет вычисления len(get_close_matches(w, data.keys())) ? data.keys() ? Вы должны проверять все значения, используемые в вашем операторе if, чтобы подтвердить свои предположения.

Ответ №1:

Программирование событий довольно сложно. Вы не должны возвращать данные из функции event, поскольку, когда она установлена как команда, объект Button() понятия не имеет, что с ней делать. Я видел, что вы пытались запрограммировать, что с этим делать, но это было бы намного сложнее. Лучше всего стараться не передавать переменные в вашей команде, хотя это можно сделать при необходимости. Это, конечно, не закончено, это ваша работа, надеюсь, это поможет вам продвинуться дальше.

 from tkinter import *
import tkinter as tk
import json
from difflib import get_close_matches


def getMeaning():
    defin = defentry.get()
    w = defin
    if w in data:
        outputlabel.configure(text=data[w])
    elif w.title() in data:
        outputlabel.configure(text=data[w.title])
    elif len(get_close_matches(w, data.keys())) > 0:
        outputlabel.configure(text=data[get_close_matches(w, data.keys())[0]])
    else:
        outputlabel.configure(text='The word does not exist')


# LIBs are done#
root = Tk()
root.geometry('300x500')
root.configure(background='#71baff')
# Window Created#
data = json.load(open('data.json'))

# Dictionary data has been read#

# Variables attened#


# BACKEND ENDED#


# FRONTEND#

welcome = tk.Label(root, text='Welcome to the Dictionary amp; Translator App', bg='#71baff', fg='#ffffff')
welcome.pack()
emptylab = tk.Label(root, bg='#71baff')
emptylab.pack()
defq = tk.Label(root, text='Enter the word : ', bg='#71baff', fg='#ffffff')
defq.pack()
defentry = tk.Entry(root, bg='#71baff', fg='#ffffff')
defentry.pack()
emptylab = tk.Label(root, bg='#71baff')
emptylab.pack()
defbutton = tk.Button(root, text='Get Definition!', bg='#71baff', fg='#71baff', command=getMeaning)
defbutton.pack()
outputlabel = tk.Label(root, bg='#71baff', fg='#ffffff')
outputlabel.pack()


root.mainloop()
  

Я получил ошибку файла, поскольку у меня нет файла. Если у вас возникнут какие-либо другие ошибки, дайте мне знать в комментариях, и мы сможем разобраться с ними.

Комментарии:

1. как я уже говорил, нет ошибки, которую выдает мне IDE. Но проблема в том, что когда я печатаю выходные данные getMeaning() в label, он возвращает только «Слово не существует», хотя я еще ничего не вводил в запись. Также после того, как он вернет, что я больше не могу использовать метку, в основном она просто остается такой.

2. То, что вы кодируете, вы добавляете в окно только один раз. Если вы хотите что-то обновить, кроме этого, у вас должен быть обратный вызов. Ваша функция getMeaning() в данном случае является обратным вызовом из события нажатия кнопки. Метод обратного вызова, который вас может заинтересовать, — after(). Вы можете сделать что-то вроде root.after(1000, getMeaning) , чтобы запускать эту функцию каждую секунду.