2016-01-23 72 views
0

我正在爲tkinter創建一個用戶登錄/註冊模塊,並且正在測試它,但是當我嘗試通過將兩個字符串傳遞給用戶字典:'instance'類型的字典錯誤參數是不可迭代的

TypeError: argument of type 'instance' is not iterable 

這是爲什麼發生?我認爲這兩個變量都是字符串...

這裏的模塊代碼:

import pickle 
from Tkinter import * 

class LoginBox: 
    def __init__(self, parent): 
     Label(parent, text="Username:").grid() 
     self.ubox=Entry(parent) 
     self.ubox.grid() 
     Label(parent, text="Password:").grid() 
     self.pbox=Entry(parent, show="*") 
     self.pbox.grid() 

    def check(self, userlist): 
     pswrd=self.pbox.get() 
     uname=self.ubox.get() 
     if uname in userlist and userlist[uname] == pswrd: 
      return True 
     else: 
      tkMessageBox.showinfo("Incorrect", "Incorrect username or password") 
      self.pbox.delete(0, "end") 


class RegisterBox: 
    def __init__(self, parent): 
     Label(parent, text="Username:").grid() 
     self.uname=Entry(parent) 
     self.uname.grid() 
     Label(parent, text="Password:").grid() 
     self.pswrd=Entry(parent, show="*") 
     self.pswrd.grid() 

    def check(self, userlist): 
     pswrd=self.pswrd.get() 
     uname=self.uname.get() 
     if uname in userlist.users and userlist.users[uname] == pswrd: 
      return False 
     else: 
      userlist.adduser(uname, pswrd) 

class UserList: 
    def __init__(self): 
     self.users={} 

    def adduser(self, user, pswrd): 
     self.users[user] = pswrd 

    def deluser(user): 
     del self.users[user] 

這裏是我的應用程序代碼:

import tkMessageBox 
from Tkinter import * 
import loginutility as lu 

root=Tk() 

def check(): 
    if logbox.check() == True: 
     tkMessageBox.showinfo("Success", "Good job!") 

users=lu.UserList() 

regbox=lu.RegisterBox(root) 
Button(root, text="Register", command=lambda: regbox.check(users)).grid() 
logbox=lu.LoginBox(root) 
Button(root, text="Login", command=check).grid() 

root.mainloop() 
+1

如果u提線,其中u得到這個錯誤 – AlokThakur

+0

這將有助於始終顯示完整的錯誤消息。有行號和其他有用的信息。 – furas

回答

1

您檢查用戶和不同的方式登錄在RegisterBoxLoginBox

userlist是不正常的字典,而是UserList類,你必須在LoginBox.check()使用userlist.usersuserlist.users[uname]

-

順便說一句:您可以創建UserList.check(user,password)

+0

謝謝!會做你的建議。可以讓它更容易。 –

相關問題