python - 将变量保存在文本文件中

标签 python user-interface python-3.x tkinter

我想将变量(包括其值)保存到文本文件中,以便下次打开程序时,任何更改都会自动保存到文本文件中 .例如:

    balance = total_savings - total_expenses 

如何将变量本身保存到文本文件中,而不仅仅是其值? 本节为注册页面

    from tkinter import *
    register = Tk()
    Label(register, text ="Username").grid(row = 0)
    Label(register, text ="Password").grid(row = 1)

    e1 = Entry (register)
    e2 = Entry (register, show= "*")

    e1.grid(row = 0, column = 1)
    e2.grid(row = 1, column = 1)

    username = e1.get()
    password = e2.get()


    button1 = Button(register, text = "Register", command = register.quit)
    button1.grid(columnspan = 2)
    button1.bind("<Button-1>")

    import json as serializer
    with open('godhelpme.txt', 'w') as f:
        serializer.dump(username, f)
    with open('some_file.txt', 'w') as f:
        serializer.dump(password, f)


    register.mainloop()

修改后的代码:

    from tkinter import *
    register = Tk()
    Label(register, text ="Username").grid(row = 0)
    Label(register, text ="Password").grid(row = 1)

    username = StringVar()
    password = StringVar()

    e1 = Entry (register, textvariable=username)
    e2 = Entry (register, textvariable=password, show= "*")

    e1.grid(row = 0, column = 1)
    e2.grid(row = 1, column = 1)


    button1 = Button(register, text = "Register", command = register.quit)
    button1.grid(columnspan = 2)
    button1.bind("<Button-1>")

    import json as serializer
    with open('godhelpme.txt', 'w') as f:
        serializer.dump(username.get(), f)
    with open('some_file.txt', 'w') as f:
        serializer.dump(password.get(), f)

登录代码:

    from tkinter import *
    login = Tk()
    Label(login, text ="Username").grid(row = 0)
    Label(login, text ="Password").grid(row = 1)

    username = StringVar()
    password = StringVar()

    i1 = Entry(login, textvariable=username)
    i2 = Entry(login, textvariable=password, show = "*")

    i1.grid(row = 0, column = 1)
    i2.grid(row = 1, column = 1)

    def clickLogin():
            import json as serializer
            f = open('godhelpme.txt', 'r')
            file = open('some_file.txt', 'r')
            if username == serializer.load(f):
                    print ("hi")
            else:
                    print ("invalid username")
                    if password == serializer.load(file):
                            print ("HELLOOOO")
                    else:
                            print ("invalid password")



    button2 = Button(login, text = "Log In", command = clickLogin)
    button2.grid(columnspan = 2)


    login.mainloop()

最佳答案

您必须在编译时知道变量的名称。所以你需要做的就是:

with open('some_file.txt', 'w') as f:
    f.write("balance %d" % balance)

使用 dict 可以更方便地管理用于将名称映射到值的对象。

您可能还想了解 picklejson提供简单的对象序列化的模块,例如 dict .

使用序列化器如pickle的方法是:

import pickle as serializer

balance = total_savings - total_expenses 
with open('some_file.txt', 'w') as f:
    serializer.dump( balance, f)

您可以在提供的代码中将 pickle 更改为 json,以使用其他标准序列化程序并以 json 格式存储对象。

编辑:

在您的示例中,您尝试存储来自 tkinterEntry 小部件的文本。了解它 here .

您可能会错过使用 StringVariable 来捕获输入的文本:

为变量创建StringVar:

username = StringVar()
password = StringVar()

将 StringVar 变量注册到 Entry 小部件:

e1 = Entry (register, textvariable=username)
e2 = Entry (register, textvariable=password, show= "*")

使用 StringVar 将内容保存在两个单独的文件中:

import json as serializer
with open('godhelpme.txt', 'w') as f:
    serializer.dump(username.get(), f)
with open('some_file.txt', 'w') as f:
    serializer.dump(password.get(), f)

如果您希望它们位于同一个文件中,请创建一个映射(dict)并存储它:

import json as serializer
with open('godhelpme.txt', 'w') as f:
    serializer.dump(
        {
            "username": username.get(),
            "password": password.get()
        }, f
    )

编辑 2:

输入文本之前使用了序列化。将 save 函数(稍后可以退出)注册到注册按钮。这样,它将在用户单击它之后被调用(这意味着内容已经存在)。方法如下:

from tkinter import *

def save():
    import json as serializer
    with open('godhelpme.txt', 'w') as f:
        serializer.dump(username.get(), f)
    with open('some_file.txt', 'w') as f:
        serializer.dump(password.get(), f)
    register.quit()

register = Tk()
Label(register, text ="Username").grid(row = 0)
Label(register, text ="Password").grid(row = 1)

username = StringVar()
password = StringVar()

e1 = Entry (register, textvariable=username)
e2 = Entry (register, textvariable=password, show= "*")

e1.grid(row = 0, column = 1)
e2.grid(row = 1, column = 1)

# changed "command"
button1 = Button(register, text = "Register", command = save)
button1.grid(columnspan = 2)
button1.bind("<Button-1>")
register.mainloop()

之前发生的情况是,保存到文件过程是在用户插入任何数据之前立即发生的。通过向按钮单击注册一个函数,您可以确保只有当按下按钮时,该函数才会执行。

强烈建议您在调试环境中使用旧代码,或者使用一些打印来弄清楚代码是如何工作的。

关于python - 将变量保存在文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30139243/

相关文章:

python - 串行发送数据时 GUI 挂起

python - 如何在Python中找到单词旁边的单词

python - 检查 Tkinter 按钮是否仍然被点击

java - 如何在 JavaFX 上将标签文本分配给确定的变量

java - 可以在android上使用jdbc驱动吗?

java - Java 中的 JScrollPane

python - 如何在Python中随机化字符串并将其转换为列表

python - 在交互式 qsub 环境中使用 mpirun 激活虚拟环境

python - Pandas 使用数组分配列值

python - 解压时 defaultdict 引发 KeyError