Python 从文件加载数据并在tkinter中使用
这是我完成以下工作的代码:Python 从文件加载数据并在tkinter中使用,python,tkinter,Python,Tkinter,这是我完成以下工作的代码: 在tkinter窗口中询问用户用户名和密码 将他们输入的内容设置为eUsername和ePassword 检查他们的密码是否正确 请记住,“示例”词典是accounts文件中的示例 问题是,当我输入正确的用户名和密码时,它仍然返回false。 等等; 我想在我做错了什么或要修复什么方面得到一些帮助。 试验 您的代码中没有任何输入,如果调用confirm(),您将看到False,因为您正在使用对帐户中的项目进行迭代,并将其与空字符串进行比较。您还可以将函数简化为返回
- 在tkinter窗口中询问用户用户名和密码
- 将他们输入的内容设置为eUsername和ePassword
- 检查他们的密码是否正确
- 请记住,“示例”词典是accounts文件中的示例
您的代码中没有任何输入,如果调用
confirm()
,您将看到False
,因为您正在使用对帐户中的项目进行迭代,并将其与空字符串进行比较。您还可以将函数简化为返回帐户。get(eUsername)==ePassword
检查:
def databaseNew():
with open("accounts.pickle", "wb") as f:
Entry = Setup["me"] = "Tes"
pickle.dump(Entry, f)
你需要打包标签等
def confirm():
print(accounts.get(eUsername) == ePassword)
这是一个粗略的示例,说明了如何将新用户添加到现有的dict和pickle中,您可以填写缺少的逻辑,并使用您计划的内容整理显示,并验证输入:
import pickle
from tkinter import *
master = Tk()
usernameL = Label(master, text="Username: ")
usernameL.pack()
usernameB = Entry(master)
usernameB.pack()
passwordL = Label(master, text="Password: ")
passwordL.pack()
passwordB = Entry(master, show="*")
passwordB.pack()
master.resizable(width=False, height=False)
master.state('normal')
master.title("Gold Farm")
def database():
with open("accounts.pickle", "rb") as f:
return pickle.load(f)
accounts = database()
def confirm():
u, p = usernameB.get(), passwordB.get()
if accounts.get(u) == p:
print(True)
# do whatever here
else:
print(False)
# login is bad
m = messagebox.askretrycancel("Invalid input")
if not m:
master.quit()
Login = Button(master, text="Login", command=confirm)
Login.place(y=350, x=620)
Login.pack()
mainloop()
我将如何使用从中获得的正确和错误输出?例如,如果函数为真,则运行函数;如果为假,则运行打印?谢谢,现在已修复。还有一点离题,在文件中添加到字典的pickle方法是什么?假设我想在测试之外添加一个新帐户。@Csarg,我更改了逻辑,您应该在确认函数中验证用户输入,消息框可能是一个好方法,可以通知用户详细信息不正确。你是在问如何为你的dict添加关键字吗?是的,我是在问如何使用pickle和我的当前文件将不同的帐户关键字添加到现有的字典中只是
pickle.load
,添加数据和pickle.dump
。
import pickle
from tkinter import *
master = Tk()
usernameL = Label(master, text="Username: ")
usernameL.pack()
usernameB = Entry(master)
usernameB.pack()
passwordL = Label(master, text="Password: ")
passwordL.pack()
passwordB = Entry(master, show="*")
passwordB.pack()
master.resizable(width=False, height=False)
master.state('normal')
master.title("Gold Farm")
def database():
with open("accounts.pickle", "rb") as f:
return pickle.load(f)
accounts = database()
def confirm():
u, p = usernameB.get(), passwordB.get()
if accounts.get(u) == p:
print(True)
# do whatever here
else:
print(False)
# login is bad
m = messagebox.askretrycancel("Invalid input")
if not m:
master.quit()
Login = Button(master, text="Login", command=confirm)
Login.place(y=350, x=620)
Login.pack()
mainloop()
import pickle
from tkinter import *
master = Tk()
usernameL = Label(master, text="Username: ")
usernameL.pack()
usernameB = Entry(master)
usernameB.pack()
passwordL = Label(master, text="Password: ")
passwordL.pack()
passwordB = Entry(master, show="*")
passwordB.pack()
master.resizable(width=False, height=False)
master.state('normal')
master.title("Gold Farm")
def database():
with open("accounts.pickle", "rb") as f:
return pickle.load(f)
accounts = database()
def new():
u, p = usernameB.get(), passwordB.get()
if u in accounts:
m = messagebox.askretrycancel("Invalid","Username taken")
if not m:
master.quit()
else:
accounts[u] = p
with open("accounts.pickle","wb") as f:
pickle.dump(accounts, f)
# do whatever
def confirm():
u, p = usernameB.get(), passwordB.get()
if accounts.get(u) == p:
print(True)
# do whatever here
else:
print(False)
# do whatever when login is bad
m = messagebox.askretrycancel("Invalid input")
if not m:
master.quit()
Login = Button(master, text="Login", command=confirm)
Login.place(y=350, x=620)
Login.pack()
new_user = Button(master, text="Create acc", command=new)
new_user.pack()
mainloop()