所以我的问题是我正在创建一个表单,目前我需要将条目放入 tk.Entry 中才能保存和加载。我已经让它可以正常工作了,但是任何包含多个单词的条目都被视为元组,加载时在输入框中显示为 {这是什么?},再次保存时变为 {{这是什么?}} 等。我考虑过使用 print 命令将元组转换为字符串值,但我不知道在本例中如何做到这一点。
ps 如果有人能告诉我如何在加载时替换添加的文本而不是添加,那就太好了。
def ldload(): f=open(ldcreds, 'r') content = f.readlines() l = [x.strip() for x in content] ldsplitlists = [i.split(", ") for i in l] Characterentx, Playerentx = ldsplitlists Characterent.insert(0, Characterentx) Playerent.insert(0, Playerentx)
以下是我保存它的方法,如果它有帮助的话
def ldsave(): with open(ldcreds, 'w') as f: f.write(Characterent.get()) f.write('\n') f.write(Playerent.get()) f.write('\n')
是的,我确实关闭了它,我只是省略了大部分变量。
问题出现在 ldload 和 ldsave 函数中处理多单词条目的方式。当你从文件中加载并使用 split(", ") 来拆分内容时,如果文本中包含逗号,它就会被拆分成多个元素并存储为元组。在插入到 tk.Entry 小部件时,这个元组被作为文本插入,导致 {} 和 , 出现。
ldload
ldsave
split(", ")
tk.Entry
{}
,
你可以将多个条目连接成一个字符串,保存时确保它们不会被视为元组。例如,使用 join 来合并条目的内容。
join
def ldsave(): with open(ldcreds, 'w') as f: # 使用 join 将多个单词连接成一个字符串 f.write(' '.join(Characterent.get().split()) + '\n') f.write(' '.join(Playerent.get().split()) + '\n')
加载时,从文件中读取内容并将其作为单一的字符串插入到输入框中。
def ldload(): f = open(ldcreds, 'r') content = f.readlines() l = [x.strip() for x in content] Characterentx, Playerentx = l # 将字符串插入 Entry,避免被视为元组 Characterent.delete(0, 'end') # 清空原有内容 Playerent.delete(0, 'end') # 清空原有内容 Characterent.insert(0, Characterentx) Playerent.insert(0, Playerentx)
' '.join()
delete(0, 'end')
insert(0, ...)
在加载内容时,使用 delete(0, 'end') 来清空 Entry 中的内容,然后再插入新内容,而不是在现有内容后追加。这样就可以确保每次加载时,输入框中的内容被完全替换,而不是追加。
Entry
如果保存的数据是:
Characterent: "John Doe" Playerent: "Player1"
文件中会保存:
John Doe Player1
加载时,Characterent 和 Playerent 将显示为 John Doe 和 Player1,而不会显示为 {John, Doe} 或 {{John, Doe}}。
Characterent
Playerent
John Doe
Player1
{John, Doe}
{{John, Doe}}
希望这些修改能解决您的问题!如果还有疑问,随时告诉我。