Добрый день. У меня есть простой интерфейс Tkinter с 4 кнопками. У каждого есть связанное текстовое поле. Мне удалось создать пользовательский интерфейс, получив состояние флажка и текст в текстовом поле из словаря в текстовом файле .txt. Я также могу успешно записать измененное состояние кнопки возврата в файл с помощью функции update ().
ПРОБЛЕМА. У меня проблемы с выяснением, как получить и записать измененный текст в текстовом поле обратно в файл. Мне нужно получить строку текстового поля для каждого текстового поля, но они являются локальными для функции makeUI (). Я не уверен, как передать все текстовые поля в функцию update ().
Предложения о том, как решить эту проблему, были бы очень благодарны.
Ниже приведен код:
from tkinter import *
from tkinter.scrolledtext import ScrolledText
import json
def loadDictFile(data_folder):
critDict = json.loads(open(data_folder+'critDict3.txt').read())
return critDict
def update(critDict, checkbuttons, data_folder):
for k in checkbuttons:
key = k.cget('text')
critDict[key][0] = k.var.get()
critDict[key][1] = commentBox.get("1.0",'end-1c') # <--HERE IS THE PROBLEM
with open(data_folder+'critDict3.txt', 'w') as file:
file.write(json.dumps(critDict))
def makeUI(data_folder, critDict):
newDict = critDict
top = Tk()
checkbuttons={}
for key, val in newDict.items():
chkVar = IntVar()
key = Checkbutton(top, text = key, variable=chkVar)
key.var = chkVar
key.var.set(val[0])
key.pack()
commentBox = ScrolledText(top, height=2, width=30)
commentBox.pack()
commentBox.insert(END, val[1])
comment = commentBox.get("1.0",'end-1c')
checkbuttons[key]=comment
print('checkbuttons is', checkbuttons)
button=Button(top, text="Update", command=lambda : update(critDict, checkbuttons, data_folder))
button.pack()
top.mainloop()
data_folder = "C:\\Users\\NB\\test\\data\\"
critDict = loadDictFile(data_folder)
makeUI(data_folder, critDict)
и вот текст файла диска 'critDict3.txt
{
"crit1": [1, "comments"], "crit4": [1, "comment4"], "crit2": [1, "comment2"], "crit3": [1, "comments3"]
}