2016-02-12 80 views
0

我有2个接口:登录和注册。验证程序

我在将用户名和密码数据保存到文本文件时出错。

而我在读回数据以进行身份​​验证时遇到问题。

这是我的代码:

import Tkinter 
WindowBox = Tkinter.Tk() 
WindowBox.geometry("250x200") 
WindowBox.title("Welcome to E-UPSR") 

getusername = Tkinter.StringVar() 
getpassword = Tkinter.StringVar() 

LabelName = Tkinter.Label (WindowBox, text="Username:") 
LabelName.pack() 
TxtBoxName = Tkinter.Entry (WindowBox, textvariable= getusername) 
TxtBoxName.pack() 

LabelName = Tkinter.Label (WindowBox, text="Password:") 
LabelName.pack() 
TxtBoxName = Tkinter.Entry (WindowBox, textvariable= getpassword) 
TxtBoxName.pack() 

tudent=[] 

def read(): 
    addstudent = open ("student.txt", "w") 
    addstudent.write("User ID: " + entry_box1.get()) 
    addstudent.write("\nUser Password: " + entry_box2.get()) 
    addstudent.close() 

def back(): 
    RegBox.withdraw() 
    WindowBox.deiconify() 
    return  

def register(): 
    WindowBox.withdraw() 
    RegBox.deiconify() 
    return 

RegBox = Tkinter.Tk() 
RegBox.geometry("250x200") 
RegBox.title("register") 

LabelName = Tkinter.Label (RegBox, text="Enter Username:") 
LabelName.pack() 
TxtBoxName = Tkinter.Entry (RegBox, textvariable= getusername) 
TxtBoxName.pack() 

LabelName = Tkinter.Label (RegBox, text="Enter Password:") 
LabelName.pack() 
TxtBoxName = Tkinter.Entry (RegBox, textvariable= getpassword) 
TxtBoxName.pack() 
RegBox.withdraw() 

def save(): 
    getusername=entry_box1.get() 
    getpassword=entry_box2.get() 
    addstudent = open ("student.txt", "w") 
    addstudent.write("Username:" + entry_box1.get()) 
    addstudent.write("Password: " + entry_box2.get()) 
    addstudent.close() 

BtnName = Tkinter.Button (RegBox, text="Back", command=back).pack() 
BtnName = Tkinter.Button (RegBox, text="Enter", command=save).pack() 
BtnName = Tkinter.Button (WindowBox, text="Register", command=register).pack() 
BtnName = Tkinter.Button (WindowBox, text="Proceed", command=read).pack() 

WindowBox.mainloop() 
+2

你从来没有定义过'entry_box1'或'entry_box2',但你试图对它们调用'get()'。 – Jkdc

+3

你可以请你发布什么错误消息?谢谢。 – lrnzcig

+0

你能举个例子吗? – newbie

回答

0

您没有在代码中创建entry_box1entry_box2,但你尝试使用它在entry_box1.get()entry_box2.get()

你必须使用getusername,而不是entry_box1getpassword代替entry_box2在两个地方

addstudent.write("Username:" + getusername.get()) 
addstudent.write("Password: " + getpassword.get()) 

addstudent.write("User ID: " + getusername.get()) 
addstudent.write("\nUser Password: " + getpassword.get()) 
0

由于Jkdc说没有定义entry_box1entry_box2但你已经创建getusernamegetpassword变量passwordusername所以使用getusername.get()获取用户名和getpassword.get() 得到密码。

def read(): 
    addstudent = open ("student.txt", "w") 
    addstudent.write("User ID: " + getusername.get()) 
    addstudent.write("\nUser Password: " + getpassword.get()) 
    addstudent.close() 

...

def save(): 
    getusername=entry_box1.get() 
    getpassword=entry_box2.get() 
    addstudent = open ("student.txt", "w") 
    addstudent.write("Username:" + getusername.get()) 
    addstudent.write("Password: " + getpassword.get()) 
    addstudent.close() 
+0

thnx很多家伙。我很感谢 – newbie

+0

@newbie随时为社区接受这个问题。 – Zety

0

线41 & 46:

TxtBoxName = Tkinter.Entry (RegBox, textvariable= getusername) 

TxtBoxName = Tkinter.Entry (RegBox, textvariable= getpassword) 

这些都需要被指定为变量,在你的代码,它们共享相同的变量名(或应该我说每次声明一个名为'TxtBoxName'的新元素时'TxtBoxName'的值会被覆盖,他们仍然出现的原因是因为你已经将它们的值打包到了窗口部件中。

当你调用上线56 :

addstudent.write("Username:" + entry_box1.get()) 

addstudent.write("Password: " + entry_box2.get()) 

你的呼吁不存在变量名get方法。 TxtBoxName.get()然而,将工作,再看看上面的段落,你应该明白为什么这不会给你想要的效果。

如果你理清了你的变量问题,你的代码将会正常运行(正如我已经做到的那样)。理解为什么会发生这一点很重要,因为这是简单的python。

当您修复了代码时,如果您的窗口在注册完成时保持不动,则不要担心,您将需要添加另一个方法调用来销毁该窗口。