Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从文件加载数据并在tkinter中使用_Python_Tkinter - Fatal编程技术网

Python 从文件加载数据并在tkinter中使用

Python 从文件加载数据并在tkinter中使用,python,tkinter,Python,Tkinter,这是我完成以下工作的代码: 在tkinter窗口中询问用户用户名和密码 将他们输入的内容设置为eUsername和ePassword 检查他们的密码是否正确 请记住,“示例”词典是accounts文件中的示例 问题是,当我输入正确的用户名和密码时,它仍然返回false。 等等; 我想在我做错了什么或要修复什么方面得到一些帮助。 试验 您的代码中没有任何输入,如果调用confirm(),您将看到False,因为您正在使用对帐户中的项目进行迭代,并将其与空字符串进行比较。您还可以将函数简化为返回

这是我完成以下工作的代码:

  • 在tkinter窗口中询问用户用户名和密码
  • 将他们输入的内容设置为eUsername和ePassword
  • 检查他们的密码是否正确
  • 请记住,“示例”词典是accounts文件中的示例
问题是,当我输入正确的用户名和密码时,它仍然返回false。 等等; 我想在我做错了什么或要修复什么方面得到一些帮助。

试验


您的代码中没有任何输入,如果调用
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()