2016-02-12 125 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。

當您修復了代碼時,如果您的窗口在註冊完成時保持不動,則不要擔心,您將需要添加另一個方法調用來銷燬該窗口。