Форум сайта python.su
Моя идея, с помощью tkinter создать словарь. Есть файл по умолчанию, в который можно вводить новые слова и их перевод (два поля ввода),(“x” переменная русское слово, и “y” переменная английское слово) и записывать их в файл нажатием кнопки “добавить”. И также поиск по имеющимся словам в словаре с помощью метода “ключ - значение”(ввести слово в поле (переменная z) и нажатием на кнопку “поиск” произвести поиск и вывод результата в поле вывода).
Пробовал разные варианты, оказывалось что использовал либо неработающие функции в питоне 3.6, либо выходили ошибки, знаний не хватает, чтобы понять как правильно пользоваться методом “ключ - значение”, если возможно помогите, пожалуйста.
В коде много закомментировано, пробовал по разному, надеюсь не мешает. Вот мой код:
Прикреплённый файлы: 29.1.2018.py (1,6 KБ)
Офлайн
нет не работающих методов в питон 3.6 , просто вы их не умеете готовить. и просто записать словарь в том виде который вы понимаете как словарь в коде в файл не получиться. файл надо переписывать так как дозапись будет каждый раз добавлять словарь с новыми данными а не изменять уже записанный
from tkinter import * import json import os #------------------------------------------------------------------------------------ def zapis(x,y,dct): dct.update({x : y}) dct.update({y : x}) with open('text2.txt', 'w') as f: f.write(json.dumps(dct)) #---------------------------------------------------------------------------------------------------- def poisk(z,dct): t.delete('1.0', END) if z in dct: t.insert(END,dct[z]) else: t.insert(END,'нет результата') #----------------------------------------------------------------------------------------------------- dct = {} if 'text2.txt' in os.listdir(): with open('text2.txt', 'r') as f: dct = json.loads(f.read()) #---------------------------------------------------------------------------------------------------- root = Tk() root.title("Dictionary") x = StringVar() # Creating the variables that will get the user's input. y = StringVar() z = StringVar() label_1 = Label(root, text="Русский: ", bg="#333333", fg="white") label_2 = Label(root, text="English:", bg="#333333", fg="white") label_3 = Label(root, text="Поиск:", bg="#333333", fg="white") entry_1 = Entry(root, textvariable=x)#Russian entry_2 = Entry(root, textvariable=y)#English entry_3 = Entry(root, textvariable=z)#Poisk t=Text(root,width=15,height=1) label_1.grid(row=1) label_2.grid(row=3) label_3.grid(row=8) entry_1.grid(row=2, column=0) entry_2.grid(row=4, column=0) entry_3.grid(row=9, column=0) t.grid(row=14,column=0) but = Button(root, text="Добавить/Add", bg="#333333", fg="white", command=lambda :zapis(x.get(), y.get(),dct)) # Note the use of lambda and the x and y variables. but.grid(row=5, column=0) but1=Button(root,text='Искать',bg="#333333", fg="white", command=lambda :poisk(z.get(),dct)) but1.grid(row=12,column=0) root.mainloop()
Отредактировано marvellik (Фев. 16, 2018 17:30:23)
Офлайн
Огромное спасибо!
Буду учиться понимать правильно.
Скажите, мой код совсем невозможно исправить…или вполне можно, но так правильнее, как вы показали?
Извините за дополнительный вопрос, в ответ приходит ошибка:
Traceback (most recent call last):
File “C:\Users\Dmitry\Desktop\TTHK\Dictionary\29.1.2018.py”, line 21, in <module>
dct = json.loads(f.read())
File “C:\Users\Dmitry\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py”, line 354, in loads
return _default_decoder.decode(s)
File “C:\Users\Dmitry\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py”, line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File “C:\Users\Dmitry\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py”, line 357, in raw_decode
raise JSONDecodeError(“Expecting value”, s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
>>>
Погуглил, но решения не нашел сам.
Отредактировано Dmitri852 (Март 5, 2018 22:49:01)
Офлайн
Dmitri852Это происходит, если текстовый файл открытый для чтения совсем пустой. Он должен содержать как минимум пустой словарь: {} (две фигурные скобки).
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
>>>
Погуглил, но решения не нашел сам.
Офлайн
Огромное спасибо!
Офлайн