2016-01-23 124 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

谢谢!会做你的建议。可以让它更容易。 –

相关问题