2016-03-10 39 views
-2

我试图在窗体中创建一个日志,让用户如果尚未拥有帐户即可注册表单。这是我的代码。python - 必须使用实例作为第一个参数调用未绑定的方法(取而代之)

从Tkinter的进口*

class myLogin(): 
def __init__(self): 
    self.form = Tk() 
    self.form.title("Log in") 
    self.form.option_add("*font",("Arial",12,"normal")) 
    self.form.geometry("500x400+430+200") 
    self.frm = Frame(self.form, width = 700, height = 500) 
    self.lab1 = Label(self.frm, text="Username:") 
    self.lab1.grid(row=0,sticky=W) 
    self.entr1 = Entry(self.frm, width = 15) 
    self.entr1.focus_set() 
    self.entr1.grid(row=0, column=1, sticky=W) 

    self.lab2 = Label(self.frm, text="Password:") 
    self.lab2.grid(row=1, sticky=W) 

    self.entr2 = Entry(self.frm, width=15, show='*') 
    self.entr2.grid(row=1, column=1, sticky=W) 

    checkbox = Checkbutton(self.frm, text="Keep me logged in") 
    checkbox.grid(column=1,columnspan=2) 

    self.btn2 = Button(self.frm, text = "Log-in", command = self.login, width=10) 
    self.btn2.grid(row=3, sticky = E, columnspan = 2) 

    self.lab3 = Label(self.frm, text="Don't have an account?") 
    self.lab3.grid(row=4,column=1) 
    self.btn3 = Button(self.frm, text = "Register", command = mySignUp.register, width=10) 
    self.btn3.grid(row=5, column = 0, columnspan = 2) 

    self.frm.pack() 
    self.form.mainloop() 



def login(self): 
    user=[] 
    pw=[] 
    ctr=0 

    with open('users.txt', 'r') as f: 
     for line in f: 
      for word in line.split(): 
       if(ctr%2==0): 
        user.append(word) 
       else: 
        pw.append(word) 
       ctr+=1 

    userctr=0; 
    for eachuser in user: 
     if((user[userctr] == self.entr1.get()) and (pw[userctr]== self.entr2.get())): 
      print("ok") 
      userctr+=1 

class mySignUp(myLogin): 
def register(self): 
    #self.destroy() 
    root = Tk() 
    top = Toplevel(root) 

    top.title("Register") 
    top.geometry("500x400+430+200") 

    top.transient(root) 
    top.lab1 = Label(top, text="Username:") 
    top.lab1.grid(row=0,sticky=W) 
    top.inpusername = Entry(top, width = 15) 
    top.inpusername.focus_set() 
    top.inpusername.grid(row=0, column=1, sticky=W) 

    top.lab2 = Label(top, text="Password:") 
    top.lab2.grid(row=1, sticky=W) 

    top.inppw = Entry(top, width=15, show='*') 
    top.inppw.grid(row=1, column=1, sticky=W) 

    top.btn2 = Button(top, text = "Sign up", command = self.addUser, width=10) 
    top.btn2.grid(row=3, sticky = E, columnspan = 2) 

    #top.lab1.pack() 
    #top.form.mainloop() 
    root.mainloop() 

def addUser(self): 
    ob = register() 
    import cgi 
    form = cgi.FieldStorage() 
    print 
    username = ob.top.inpusername.get() 
    password = ob.top.inppw.get() 
    print(username) 
    print(password) 
    #print "The user entered %s" % form.getvalue("entr1") 



if __name__ == "__main__": 
    app = myLogin() 
    #login() 
    #window = Window(None) 

    #window.title("title") 

    #window.mainloop() 

当用户点击注册按钮,它应该调用在类mySignUp()和注册表格的登记方法应该弹出 但我得到这个错误

异常在Tkinter的回调 回溯(最近通话最后一个):

文件 “C:\ Python27 \ LIB \ LIB-TK \ Tkinter.py”,线1536,在通话 return self.func(* args) TypeError:必须使用mySignUp实例调用未绑定的方法register()作为第一个参数(取而代之)

什么可能是错误的?

回答

1

必须调用绑定的方法register与类mySignUp的实例,即addUser第一行应为

ob = self.register() 

因为Python会不知道哪个mySignUp你指的是。

+0

我还是得到了同样的错误 – camille

1

你把它像一个类的方法,使用方法:

mysignup= mySignUp() 
self.btn3 = Button(self.frm, text = "Register", command = mysignup.register, width=10) 
相关问题