小能豆

如何在没有花括号或其他符号的情况下将值插入到 tkinter 条目中?

py

所以我的问题是我正在创建一个表单,目前我需要将条目放入 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')

是的,我确实关闭了它,我只是省略了大部分变量。


阅读 21

收藏
2024-12-05

共1个答案

小能豆

问题出现在 ldloadldsave 函数中处理多单词条目的方式。当你从文件中加载并使用 split(", ") 来拆分内容时,如果文本中包含逗号,它就会被拆分成多个元素并存储为元组。在插入到 tk.Entry 小部件时,这个元组被作为文本插入,导致 {}, 出现。

解决方法:

  1. 保存时: 将多个条目(例如,包含多个单词的字符串)转化为字符串,而不是使用元组存储。
  2. 加载时: 恢复为一个单独的字符串,而不是插入一个元组。

修改代码:

保存函数:

你可以将多个条目连接成一个字符串,保存时确保它们不会被视为元组。例如,使用 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 中的内容,然后再插入新内容,而不是在现有内容后追加。这样就可以确保每次加载时,输入框中的内容被完全替换,而不是追加。

示例:

如果保存的数据是:

Characterent: "John Doe"
Playerent: "Player1"

文件中会保存:

John Doe
Player1

加载时,CharacterentPlayerent 将显示为 John DoePlayer1,而不会显示为 {John, Doe}{{John, Doe}}

希望这些修改能解决您的问题!如果还有疑问,随时告诉我。

2024-12-05