hon*_*ger 5 python user-interface tkinter python-3.x
我想将变量(包括其值)保存到文本文件中,以便下次打开我的程序时,任何更改都会自动保存到文本文件中。例如:
balance = total_savings - total_expenses
Run Code Online (Sandbox Code Playgroud)
我将如何将变量本身保存到文本文件中,而不仅仅是将其值保存?此部分用于注册页面
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()
Run Code Online (Sandbox Code Playgroud)
修改后的代码:
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)
Run Code Online (Sandbox Code Playgroud)
登录代码:
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()
Run Code Online (Sandbox Code Playgroud)
您必须在编译时知道变量的名称。所以你需要做的就是:
with open('some_file.txt', 'w') as f:
f.write("balance %d" % balance)
Run Code Online (Sandbox Code Playgroud)
这可以更方便地使用dict
对象将名称映射到值进行管理。
您可能还想了解pickle
或json
模块,这些模块提供了对象的简单序列化,例如dict
.
使用序列化程序的方法pickle
是:
import pickle as serializer
balance = total_savings - total_expenses
with open('some_file.txt', 'w') as f:
serializer.dump( balance, f)
Run Code Online (Sandbox Code Playgroud)
您可以在提供的代码中更改pickle
为json
使用其他标准序列化程序并以json
格式存储对象。
在您的示例中,您尝试从tkinter
的Entry
小部件存储文本。在这里阅读。
您可能错过的是使用 StringVariable 来捕获输入的文本:
StringVar
为变量创建:
username = StringVar()
password = StringVar()
Run Code Online (Sandbox Code Playgroud)
将 StringVar 变量注册到 Entry 小部件:
e1 = Entry (register, textvariable=username)
e2 = Entry (register, textvariable=password, show= "*")
Run Code Online (Sandbox Code Playgroud)
使用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)
Run Code Online (Sandbox Code Playgroud)
如果您希望它们在同一个文件中创建一个映射 ( dict
) 并存储它:
import json as serializer
with open('godhelpme.txt', 'w') as f:
serializer.dump(
{
"username": username.get(),
"password": password.get()
}, f
)
Run Code Online (Sandbox Code Playgroud)
您在输入文本之前使用了序列化。将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()
Run Code Online (Sandbox Code Playgroud)
之前发生的是保存到文件过程在用户插入任何数据之前立即发生。通过向按钮单击注册一个函数,您可以确保只有当按钮被按下时,该函数才会执行。
我强烈建议您在调试环境中使用旧代码或使用一些打印件来弄清楚代码是如何工作的。
归档时间: |
|
查看次数: |
24073 次 |
最近记录: |