从不同功能的 tkinter 文本框中获取文本
get text from tkinter text box in a different function
美好的一天。
我有一个带有 4 个复选按钮的简单 tkinter UI。每个都有一个关联的文本框。我设法通过从 .txt 文件中的字典获取复选框状态和文本框中的文本来创建 UI。我还可以使用 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"]
}
您可以用所有 chkVar
和 commentBox
创建 list/dictionary
all_items[key] = [chkVar, commentBox]
并发送到 update()
command=lambda:update(critDict, all_items, data_folder))
在 update()
里面你可以访问它
for key, [chkVar, commentBox] in all_items.items():
def makeUI(data_folder, critDict):
top = Tk()
all_items = {}
for key, val in critDict.items():
chkVar = IntVar(value=val[0])
cb = Checkbutton(top, text=key, variable=chkVar)
cb.pack()
commentBox = ScrolledText(top, height=2, width=30)
commentBox.pack()
commentBox.insert('end', val[1])
all_items[key] = [chkVar, commentBox]
button = Button(top, text="Update", command=lambda:update(critDict, all_items, data_folder))
button.pack()
top.mainloop()
def update(critDict, all_items, data_folder):
for key, [chkVar, commentBox] in all_items.items():
critDict[key] = [chkVar.get(), commentBox.get("1.0", 'end-1c')]
with open(data_folder+'critDict3.txt', 'w') as file:
file.write(json.dumps(critDict))
美好的一天。 我有一个带有 4 个复选按钮的简单 tkinter UI。每个都有一个关联的文本框。我设法通过从 .txt 文件中的字典获取复选框状态和文本框中的文本来创建 UI。我还可以使用 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"]
}
您可以用所有 chkVar
和 commentBox
all_items[key] = [chkVar, commentBox]
并发送到 update()
command=lambda:update(critDict, all_items, data_folder))
在 update()
里面你可以访问它
for key, [chkVar, commentBox] in all_items.items():
def makeUI(data_folder, critDict):
top = Tk()
all_items = {}
for key, val in critDict.items():
chkVar = IntVar(value=val[0])
cb = Checkbutton(top, text=key, variable=chkVar)
cb.pack()
commentBox = ScrolledText(top, height=2, width=30)
commentBox.pack()
commentBox.insert('end', val[1])
all_items[key] = [chkVar, commentBox]
button = Button(top, text="Update", command=lambda:update(critDict, all_items, data_folder))
button.pack()
top.mainloop()
def update(critDict, all_items, data_folder):
for key, [chkVar, commentBox] in all_items.items():
critDict[key] = [chkVar.get(), commentBox.get("1.0", 'end-1c')]
with open(data_folder+'critDict3.txt', 'w') as file:
file.write(json.dumps(critDict))